2016-02-05 36 views
0

我遇到了一個並非新問題。有很多關於它的線程說我需要從主線程中更新它。Recycleview notifyDataSetChanged不更新數據集

我嘗試這樣做:

How do I make RecyclerView update its layout?

,但沒有真正的工作。我懷疑我不是從主線程調用它。但我還不知道。我使用的是FragmentStatePagerAdapter,這裏的代碼剝離版本(一種長不幸):

public Fragment getItem(int position) { 
    BaseFragment tabFragment; 
    switch (position) { 
     default: 
     case 0: 
      tabFragment = MyTabFragment.newInstance(); 
      break; 
     case 1: 
      tabFragment = MyTabFragment.newInstance(); 
      break; 
    } 

的每個標籤都有項目列表的recyclerview。現在我已經在我的標籤片段中佈置了一個按鈕,可以觸發自定義對話框。如果用戶點擊確定,它必須刷新對話框後面的標籤,但不幸的是它永遠不會。該對話框消失和選項卡背後我回收觀點保持不變:(

這裏是一個btnlistener對話框的剝離版本:

public class MyTabFragment extends Fragment 
{ 
    //... a bunch of code 
    private void setBtnListener(Button followBtn) { 
     followBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(final View view) { 
       if (!myData.isOK()) { 
        final MyCustomDialog dialog = new MyCustomDialog(view.getContext(), myData, null); 
        dialog.setListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          // up to this point the code works. 
          OnTestClick click = new OnTestClick(myData, null); 
          click.onClick(view); 
          dialog.dismiss(); 

          // now the dialog goes away and I must refresh the tabs behind the dialog 
          // this tries to do it, but it does not work! 
          fetchMessages(); 
         } 
        }); 
        dialog.show(); 
       } 
      } 
     }); 
    } 
} 

如果你讀它,到目前爲止,你很耐心:)

現在是我嘗試刷新標籤:

public class MyTabFragment extends Fragment 
{ 
    //... a bunch of code 
    void fetchMessages() { 
     mMessagesTask = new MyMessagesTask(getAppContext(), mMessageType); 
     mMessagesTask.setCallback(new MyMessagesTask.OnResult(){ 
      @Override 
      public void onFinished() { 
       setIsLoading(false); 
       if (mList != null) { 
        MyMessagesRecyclerAdapter adapter = ((MyMessagesRecyclerAdapter) mList.getAdapter()); 
        // it gets here, but the recycle view never refreshes :(
        adapter.notifyDataSetChanged(); 
        Log.d("[test]", "callback called but the tabs still show old messages"); 
       } 
      } 
     }); 
     mMessagesTask.execute(mVenue); 
    } 
} 

終於我的自定義任務

public class MyMessagesTask extends AsyncTask<MyData, Void, Void> { 
    //... a bunch of code 
    private OnResult mCallback; 

    public void setCallback(OnResult mCallback) { 
     this.mCallback = mCallback; 
    } 

    public interface OnResult { 
     void onFinished(); 
    } 

    @Override 
    protected void onPostExecute(Void param) { 
     super.onPostExecute(param); 

     if (mCallback != null) { 
      mCallback.onFinished(); 
     } 
    } 
    //... a bunch of code 
} 

有一堆東西我沒有包括,但希望有人可以發現這個問題。

thx!

+0

是否要更新佈局而不進行任何數據更改? –

+0

您是否將項目添加到mList? –

+0

更新列表,然後在適配器上調用notifyDataSetChanged()。 –

回答

0

您需要在使用片段對象的佈局中更改,如果片段的情況下,如果您可以傳遞ArrayList,則notifydatasetChange正在工作。在片段的情況下,不可更改,因爲每當uoy通知適配器時它將發送一個新對象

相關問題