在fragment中用频道管理遇到的问题(解决)

ps:和在Activity中做大体是一样的,如果想了解具体内容,请观看上一篇文章:https://blog.csdn.net/weixin_43807869/article/details/85062439

在fragment做频道管理遇到的问题:
在这里插入图片描述
大家仔细观察就可以发现,不论怎么去掉频道,返回后频道还在

可以判断是onActivityResult方法没有接收到回传值

对比一下,Activity做法与Fragment做法不同之处

Fragment:

//进入频道管理
 ChannelActivity.startChannelActivity((AppCompatActivity) getActivity(),tele_list);

Activity:

//启动管理,跳转(进入频道管理),将频道集合传过去
  ChannelActivity.startChannelActivity(MainActivity.this,titlelist);

参数一个是getActivity(),一个是MainActivity.this
getActivity():fragment没有上下文,它只能求助于它绑定的Activity
所以说修改频道后返回,值没有回传到Fragment中的onActivityResult而是回传到了它绑定的activity中

解决办法:
在fragment绑定的Activity中,重写onActivityResult方法,将data传递给fragment中的onActivityResult方法:

//接受到新频道的值
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         //根据tag找到fragment
        Fragment ff = getSupportFragmentManager().findFragmentByTag("ff");
        //将得到的新频道传递给fragment01的onActivityResult
        ff.onActivityResult(requestCode, resultCode, data);

    }

结果图:
在这里插入图片描述

最后:我还遇见一种错误,操作频道后,切换下方的fragment(点击消息2/3),再次返回消息1发现又回到最初的频道:

原因是:切换fragment,我用的替换事务的方法,每次切换都会new新的fragment**

**这样:**

 //获取事务管理
        manager = getSupportFragmentManager();
        //开启事务
        FragmentTransaction fragmentTransaction = manager.beginTransaction();
        //添加事务
        fragmentTransaction.add(R.id.frameLt,new Fragment01());
        //提交事务
        fragmentTransaction.commit();

        //第一个Radiobutton默认选中
        radioGroup.check(radioGroup.getChildAt(0).getId());

        //radioGroup的监听
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                //开启新事务,上一个已经提交
                FragmentTransaction fragmentTransaction2 = manager.beginTransaction();

                switch (i){
                    case R.id.btn01:
                        //替换fragment
                        fragmentTransaction2.replace(R.id.frameLt,new Fragment01());
                        break;
                    case R.id.btn02:
                        fragmentTransaction2.replace(R.id.frameLt,new Fragment02());
                        break;
                    case R.id.btn03:
                        fragmentTransaction2.replace(R.id.frameLt,new Fragment03());
                        break;

                }
                fragmentTransaction2.commit();
            }
        });

ps:可能只有我会遇到这种错吧! 希望对大家有帮助~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是在fragment中使用RecyclerView显示列表的步骤: 1. 在fragment的布局文件中添加RecyclerView控件,例如: ``` <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 创建一个RecyclerView的Adapter,负责将数据绑定到列表项视图上。例如: ``` public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.list_item, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { String item = mData.get(position); holder.textView.setText(item); } @Override public int getItemCount() { return mData.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { public TextView textView; public MyViewHolder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); } } } ``` 3. 在fragment的代码中,初始化RecyclerView和Adapter,并将Adapter设置给RecyclerView,例如: ``` public class MyFragment extends Fragment { private RecyclerView mRecyclerView; private MyAdapter mAdapter; @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mRecyclerView = view.findViewById(R.id.recyclerView); mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); List<String> data = new ArrayList<>(); data.add("Item 1"); data.add("Item 2"); data.add("Item 3"); mAdapter = new MyAdapter(data); mRecyclerView.setAdapter(mAdapter); } } ``` 这样就完成了在fragment中使用RecyclerView显示列表的步骤。需要注意的是,要将LayoutManager设置给RecyclerView,用于指定列表项的显示方式。上面的例子中使用了LinearLayoutManager,可以根据需要选择其他的LayoutManager。同时,还需要提供数据给Adapter,这里使用了一个简单的列表数据。在实际应用中,可以通过网络请求或者数据库查询等方式获取数据,再将数据传递给Adapter。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值