2015-09-26 64 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选中。 –

相关问题