1

У меня есть класс фрагмента, связанный с кнопкой и Listview, когда кнопка нажата, появится диалоговое окно DialogFragment на вершине класса фрагмента. Он будет принимать пользователей и добавлять их в базу данных, все работает, но список не обновляется, я знаю, что мне нужно вызвать adapter.notifyDataChange() Я напишу код psudeo.Android - ListView не обновляется

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_notes, container, false); 

    add = (Button) view.findViewById(R.id.button1); 

    add.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //New DialogFragment show.dialog 

     } 
    }); 

    filllist(view); 

    return view; 
} 

Другой класс, создание моего DialogFragment

public Dialog onCreateDialog(Bundle savedInstanceState){ 


    final AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity()); 

    final View view = getActivity().getLayoutInflater().inflate(R.layout.custom_layout, null); 
    build.setView(view); 

    build.setPositiveButton(R.string.add, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      final String text = ((EditText) view.findViewById(R.id.randomtext)).getText().toString(); 


       //Call insert method of database helper. pass user input 
       //dismiss 
       adapter.notifyDataSetChanged(); 


     } 
    }); 

    build.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dismiss(); 
     } 
    }); 

    return dialog.create(); 

} 

Когда пользователь заканчивает заполнение полей EditText и прессы добавлять данные вставки в базу данных и увольняет dialogFragment но не обновляет/обновить ListView, где я могу вызвать notifyDataSetChanged();

ответ

1

Перед тем, как позвонить notifyDataSetChanged, вам необходимо изменить данные резервного копирования в своем списке. Например, если вы создали свой адаптер следующим образом:

mAdapter = new MyAdapter(context, R.layout.item_listview_layout, mData); 

, то вам необходимо обновить mData поле и только затем вызвать notifyDataSetChanged.

+0

Итак, мне нужно создать новый метод, называющий mAdapter = new MyAdapter (контекст, R.layout.item_listview_layout, mData); затем adapter.notifyDataSetChanged. Как фрагмент я вызываю этот метод в onActivityCreated? – Mark

+0

Прежде чем я смогу ответить на этот вопрос, вы могли бы опубликовать, как инициализируется переменная 'adapter' в DialogFragment? – Mikhail

+0

адаптер - это только мой собственный макет для одного списка и отображение данных, полученных в TextView, но я инициализировал его адаптером CustomAdapter; создавая экземпляр CustomAdapter. Скорее всего, мне нужно будет вызвать notifydatachange в моем классе фрагмента либо onActivityCreated, но не onCreateView – Mark

0

Это простое решение. Каждый раз перед вызовом notifyDataSetChanged() вам всегда нужно обновлять список, прикрепленный к адаптеру. Например, если у вас есть функция именования setListData(), которая заполняет данные для вас в списке адаптеров, вы вызываете ее до notifyDataSetChanged(). (note setDataList() является просто слепым примером, поскольку вы не использовали этот код, ваш код может отличаться)

Как просто! Надеюсь, он сработает.

Смежные вопросы