마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

frament에서 db바로 띄우기

0 추천
activity안에 'my refrigerator', 'likes', 'delete account' 
프레그먼트를 넣었는데, 
처음 프레그먼트에 진입하면 초기화면이 나오고 
'likes' 또는 'delete account' 프레그먼트를 누른 후
 다시 돌아와야 정보들이 출력돼서 나옵니다.
 처음에 바로 정보들이 나오게하고 싶은데, 어떻게 구현해야할까요?

 

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = (ViewGroup) inflater.inflate(R.layout.fragment_refrig, container, false);
        context = container.getContext();
        activity = (UserActivity) getActivity();
        username_txt=rootView.findViewById(R.id.name_txt);
        username_txt.setText(activity.user_name);
        id = activity.user_code;
        count = activity.dbAc.getRefResultSum(id);
        cook_sum = rootView.findViewById(R.id.cook_sum);
        cook_sum.setText(count.toString());
        recycler_rcp = rootView.findViewById(R.id.recycler_ref);
        LinearLayoutManager layoutManager =
                new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
        recycler_rcp.setLayoutManager(layoutManager);
        adapter = new RefrigItemAdapter();
        code_date= activity.dbAc.getCodeDate(id);
        ArrayList<ArrayList<String>> Refriglist = activity.dbAc.getRefrigList(code_date);
        for(int i=0; i<Refriglist.size(); i++){
                String tmp_code = code_date.get(i).get(0);
                String tmp_date = code_date.get(i).get(1);
                adapter.addItem(new RefrigItem(Refriglist.get(i).get(0), Refriglist.get(i).get(1), Refriglist.get(i).get(2),
                        Refriglist.get(i).get(3), tmp_date,tmp_code));
        }
        recycler_rcp.setAdapter(adapter);
        adapter.setOnItemClickListener(new OnRefrigItemClickListener() {
            @Override
            public void onItemClick(RefrigItemAdapter.ViewHolder holder, View view, int position) {
                RefrigItem item = adapter.getItem(position);
                ///bundle에 details 넣는 코드는 길이 제한때문에 생략//
                FragmentManager fm = activity.getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction();
                RefDetailFragment rd = new RefDetailFragment();
                rd.setArguments(bundle);
                ft.replace(R.id.fragment_container, rd).commit();
            }
        });
        return rootView;
    }
}
haky619 (190 포인트) 님이 2022년 5월 6일 질문
haky619님이 2022년 5월 6일 수정

2개의 답변

0 추천

코드가 딱히 이상해 보이진 않네요.  

아래 루프부분이 이상해 보입니다. adapter에 아이템을 일일이 추가하고 계시네요.

for(int i=0; i<Refriglist.size(); i++){
     ...
     adapter.addItem(new RefrigItem(Refriglist.get(i).get(0), Refriglist.get(i).get(1), Refriglist.get(i).get(2),
                        Refriglist.get(i).get(3), tmp_date,tmp_code));
}

 

adapter에 아이템을 일일이 추가하지 말고 한번에 아이템을 adapter에 세팅하도록 변경해 보세요.
 

ArrayList<ArrayList<String>> Refriglist = activity.dbAc.getRefrigList(code_date);
List<RefrigItem> adpaterItems = new ArrayList<>();
for(int i=0; i<Refriglist.size(); i++){
    ...
    RefrigItem item = ...
    adpaterItems.add(item);
}

adapter.setItems(adpaterItems);

// Adapter
public void setItems(List<RefrigItem> items) {
   this.items = items;
   notifyDatasetChanged();
}

public int getItemCount() {
    return this.item.size();
}

 

고칠 부분이 몇 군데 있지만, 제일 눈에 띄는 곳 한군데만 말씀드리면 리스트 자료구조입니다.
 

ArrayList<ArrayList<String>> Refriglist = activity.dbAc.getRefrigList(code_date);

 

activity.dbAc.getRefrigList(code_date)가 ArrayList<ArrayList<String>> 대신에 List<RefrigItem>을 리턴하도록 변경하세요.

spark (227,470 포인트) 님이 2022년 5월 7일 답변
spark님이 2022년 5월 7일 수정
이게 문제 해결이 안된다면 어댑터 관련 코드도 올려보세요.
0 추천
ArrayList<ArrayList<String>> Refriglist = activity.dbAc.getRefrigList(code_date);

안에 코드의 확인을 해보시는게 좋을 거 같습니다.

dbAc에 대한 DB 접근 처리가 room등을 사용하였다면 비동기로 완료 안되었던가 하는 문제일 수 있습니다.

그래서 처음 진입때는 refriglist의 개수가 0개이다가 다른 프래그먼트를 다녀오면 처리가 되어 나오는게 아닐까 싶네요

Elan's (760 포인트) 님이 2022년 5월 11일 답변
...