来自不同片段

时间:2015-09-26 12:31:23

标签: android android-fragments notifydatasetchanged

我目前有3个片段(标签),目前正在使用viewpager。我有每个片段的1个列表视图,我想在点击视图后通知对方。我尝试在mainactivity上使用setOnPageChangeListener()上的notifyDataSetChanged()。问题是,当我更改标签时,我可以看到插入的数据。由于更改标签后发生了更改。

2 个答案:

答案 0 :(得分: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
    }

}

片段传输数据集已更改

然后从通知数据集交换的片段中执行:

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

答案 1 :(得分: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();
    }