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

엑티비티에서 프레그먼트로 옮긴 커스텀리스트뷰에 문제가.. ㅜㅜ

0 추천
엑티비티에서는 데이터가 잘 추가되던 커스텀 리스트뷰가있습니다.

프레그먼트에 사용해야해서 다 옮기고 테스트를 해보는데,

setAdapter 후, 어댑터에 데이터 추가하고 notifyDataSetChanged() 를 호출해줘도 리스트뷰에 데이터가 추가되지 않습니다.. ㅠ

먼저 소스부터 첨부하겠습니다 !! (최대한 정리했습니다)

 

----------

 
public static PrivateFragment newInstance(String param1, String param2) {
   .....
  .....
  private Adapter listadapter;
  private ArrayList<Data> lists = new ArrayList<>();
  
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {

   View v2 = inflater.inflate(R.layout.fragment_private, container, false); // Listview 가 있는 레이아웃 인플레이트. (findViewById 사용 위해)

   listView = (ListView) v2.findViewById(R.id.listView);
   listadapter = new listAdapter(getActivity(), lists);
   listView.setAdapter(listadapter);

   lists.clear();
   Data data = new Data(데이터1, 데이터2);
   lists.add(data);
   listadapter.notifyDataSetChanged();
   
   return inflater.inflate(R.layout.fragment_private, container, false);
  }

  class listAdapter extends ArrayAdapter<Data> {
   public listAdapter(Context context, List<Data> objects) {
    super(context, 0, objects);
   }

   @Override
   public View getView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
     convertView = getLayoutInflater().inflate(R.layout.memo_list_item, parent, false);
    }

    TextView txtDate = (TextView) convertView.findViewById(R.id.txtDate);
    TextView txtMemo = (TextView) convertView.findViewById(R.id.txtMemo);

    final Data data = lists.get(position);
    txtDate.setText(data.getDate());
    txtMemo.setText(data.getShortText());

    return convertView;
   }
  }
 }

 

 

-----------

 

 
lists.add(data); 후에 lists 를 get해서 확인해보았는데 lists 에는 데이터가 들어있습니다!
 

무엇이 문제일까요...? ㅠㅠ
 

context 문제인것 같기도 하면서.. 감이 안잡히네요..
익명사용자 님이 2017년 11월 25일 질문
2017년 11월 25일 수정

1개의 답변

0 추천
 
채택된 답변
return inflater.inflate(R.layout.fragment_private, container, false);


return v2; 로 해야 합니다.

v2에 추가해 놓고, 다시 생성해서 리턴하니 v2가 날라가는 겁니다.
Will Kim (43,170 포인트) 님이 2017년 11월 25일 답변
정말 감사합니다...!
...