2015-09-26 69 views
1

我目前有3個片段(選項卡),並且當前正在使用viewpager。我有一個listview爲每個片段,並且我想通知另一個單擊視圖後發生的事情。我嘗試在mainactivity上的setOnPageChangeListener()上使用notifyDataSetChanged()。問題是,當我更改標籤頁時,我可以看到插入的數據。由於更改標籤後發生更改。來自不同片段的notifyDataSetChanged()

+0

由於您正在使用視圖尋呼機,因此它有一個選擇選項需要在當前片段的兩側加載多少片段,比如說1.So 1片段將被加載到當前片段的任一側,因此如果您試圖引用除這些片段之外的任何片段,那麼可能性不會是什麼發生或者它會崩潰,並告訴你沒有這樣的視圖或適配器存在,這不是一個答案,而是當你得到它時要注意的東西,我也需要同樣的東西。 –

+0

感謝您的注意。看到數據在更改制表符之後會變得非常煩人。 XD –

回答

3

您可以考慮使用廣播接收器來通知數據集更改。

在您的接收片段

public static final string RADIO_DATASET_CHANGED = "com.yourapp.app.RADIO_DATASET_CHANGED"; 

private Radio radio; 

在onCreate方法:

radio = new Radio(); 

接收片段內的無線電類:

private class Radio extends BroadcastReceiver{ 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       if (intent.getAction().equals(RADIO_DATASET_CHANGED)){ 
        //Notify dataset changed here 
       } 
     } 

在上恢復該接收片段方法:

@Override 
     protected void onResume() { 
      super.onResume();      
       //using intent filter just in case you would like to listen for more transmissions 
       IntentFilter filter = new IntentFilter(); 
       filter.addAction(RADIO_DATASET_CHANGED);      
       getActivity().getApplicationContext().registerReceiver(radio, filter); 
     } 

確保我們註銷接收器的的onDestroy方法

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    try { 
     getActivity().getApplicationContext().unregisterReceiver(radio); 
    }catch (Exception e){ 
     //Cannot unregister receiver 
    } 

} 

片段傳輸的數據集改變

然後從片段被通知datasetchange只是做:

Intent intent = new Intent(ReceivingFragment.RADIO_DATASET_CHANGED); 
getActivity().getApplicationContext().sendBroadcast(intent); 
+1

好吧,它正在努力! :D如果你能看見我,我現在正在瘋狂。非常感謝。 :D我剛剛注意到notifydatasetchanged()一直在導致我的標籤刷卡變慢。當我嘗試使用notifydatasetchaned時,它不起作用,而是我再次打電話給我的列表。有效。比以前更平滑。 :) –

+0

很高興爲您服務! –

+0

只是好奇嗎? unregisteredReceiver()如何工作?我似乎無法稱之爲? –

0

在你的MainActivity中,試試這段代碼。它可能有幫助。

@Override 
    public void onPageSelected(int position) { 
     // TODO Auto-generated method stub 
     if (position ==0) 
      viewPager.getAdapter().notifyDataSetChanged(); 
     if (position == 1) 
      viewPager.getAdapter().notifyDataSetChanged(); 
if (position == 2) 
      viewPager.getAdapter().notifyDataSetChanged(); 
    } 
+0

我認爲這是@Renz現在正在做的 – maciekjanusz

+0

這就是我把它放在哪裏。在setonpagechangelistener的onpages選中。 –

相關問題