2014-09-09 2 views
0

SOLVED - в моем комментарии ниже. Мой фрагмент содержит ListView, который отображает данные из базы данных. Когда я нажимаю Clear, я удаляю данные из базы данных. Я хочу, чтобы немедленно обновить данные на экране, и я думаю, что мне нужно, чтобы обновить свой фрагмент:Как обновить фрагмент с помощью ListView?

public class MyFragment extends Fragment implements View.OnClickListener 

с ListView:

@Override 
public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_my, container, false); 
    //... 
    listView = (ListView) rootView.findViewById(R.id.listView); 
    adapter = new ArrayAdapter<String>(getActivity(),R.layout.row, R.id.label, my_data); 
    listView.setAdapter(adapter); 

    return rootView; 
    } 
} 

Я хочу назвать обновить здесь, после щелчка на кнопке:

@Override 
    public void onClick(View v) { 
     db.deleteAll(); 
     my_data = db.getAllData(); 
     adapter.notifyDataSetChanged(); 

     /* 
     * I tried this: 
      Fragment currentFragment =getFragmentManager().findFragmentByTag("MyFragment"); 
      FragmentTransaction fragTransaction = getFragmentManager().beginTransaction(); 
      fragTransaction.detach(currentFragment); 
      fragTransaction.attach(currentFragment); 
      fragTransaction.commit(); 
     */ 
} 

Я пробовал решение, которое я написал в комментарии (и многие подобные, что я нашел на SO), но он сбой. У вас есть какие-либо указания, как я могу это сделать?

Мой LogCat:

E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    java.lang.NullPointerException 
    at android.app.BackStackRecord.run(BackStackRecord.java:668) 
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
    at android.os.Handler.handleCallback(Handler.java:733) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5017) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
    at dalvik.system.NativeStart.main(Native Method) 
+1

аварии >> LogCat – 2Dee

+0

разместим ваш LogCat (http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this) – EpicPandaForce

ответ

0

Вам не нужно, чтобы обновить фрагмент. Снова установите адаптер с новыми результатами. Вот пример:

@Override 
public void onClick(View v) { 
    db.deleteAll(); 
    link_list = db.getAllLinks(); 
    adapter = new ArrayAdapter<String>(getActivity(),R.layout.row, R.id.label, link_list); 
    listView.setAdapter(adapter); 
} 
+0

Просто поймите, спасибо, спасибо :) – livetwice

0

я просто решить мою проблему, это не было необходимо обновить фрагмент. Достаточно уведомить адаптер об изменениях и затем повторно установить его в спискеView. Я хотел голосовать-вверх, но у меня слишком низкая репутация, так спасибо Вам особенно @Arash и @Roll no1

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