acvity和fragment通过广播联系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了acvity和fragment通过广播联系相关的知识,希望对你有一定的参考价值。

今天我遇到一个问题,就是在activity中需要动态改变fragment中的控件,以前看到过可以在activity中得到fragment实例,然后修改控件;

今天实验了一个新的办法,通过新的办法,就是通过本地广播;

1.在Fragment中编写广播接收器

public class ShouYeFragment extends Fragment {

    private ListView listView;
    private List<BoWen> list=new ArrayList<BoWen>();
    private BoWenAdapter adapter;
    private WeiBoDataBase weiBoDataBase=WeiBoDataBase.getInstance(getContext());

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        View view=inflater.inflate(R.layout.shouye_view,container,false);

        listView= (ListView) view.findViewById(R.id.bowen_list);

        return view;
    }
    public List<BoWen> getBoWen(){
        List<BoWen> list1=new ArrayList<BoWen>();
        List<String> bPhone=weiBoDataBase.getBPhone(MainActivity.getYonghuming());
        for (String bphone: bPhone){
            for(BoWen boWen:weiBoDataBase.getBoWen(bphone)){
                list1.add(boWen);
            }
        }
        return list1;
    }


    public class ShouYeBroadCastReceiver extends BroadcastReceiver{
        @Override
        public void onReceive(Context context, Intent intent) {
            list=getBoWen();
            adapter=new BoWenAdapter(getContext(),R.layout.bowen_view,list);
            listView.setAdapter(adapter);
        }
    }
}

在activity中注册发送本地广播

public class MainActivity extends FragmentActivity {

  

    private ShouYeFragment shouYeFragment;
    private FragmentManager manager;
    private FragmentTransaction transaction;

    private LocalBroadcastManager broadcastManager;
    private ShouYeFragment.ShouYeBroadCastReceiver shouYeBroadCastReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_view);

       

        shouYeFragment=new ShouYeFragment();
        manager=getSupportFragmentManager();

        broadcastManager = LocalBroadcastManager.getInstance(this);
        shouYeBroadCastReceiver=shouYeFragment.new ShouYeBroadCastReceiver();
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.ShouYe_BROADCAST");
        broadcastManager.registerReceiver(shouYeBroadCastReceiver, intentFilter);


        transaction=manager.beginTransaction();
        transaction.add(R.id.zhuyaoneirong_layout,shouYeFragment);
        transaction.addToBackStack(null);
        transaction.commit();
        init();

    }
    private void init(){
                            Intent intent1=new Intent("android.intent.action.ShouYe_BROADCAST");
                            broadcastManager.sendBroadcast(intent1);              
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        broadcastManager.unregisterReceiver(shouYeBroadCastReceiver);
    }
}

  

以上是关于acvity和fragment通过广播联系的主要内容,如果未能解决你的问题,请参考以下文章

从广播接收器更改片段

如何使用片段将联系人选择到edittext

如何通过代码设置片段标签?

如何使用警报管理器将数据从片段传递到广播接收器

ViewPager开关没有显示片段之间

Android 片段生命周期