ViewPager+Fragment的传值问题

本文介绍了在使用ViewPager与Fragment交互时如何正确传递值,包括从Activity到Fragment的传值方法,以及避免常见错误,如不同对象导致的异常和使用标签引起的错误。同时,也展示了Fragment向Activity回传值的接口实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

activity向fragment传值,可以这样做:在activity中写  one.setArguments(bundle);其中one是fragment对象,在接受值得fragment中写

Bundle bundle = getActivity()
.getSupportFragmentManager()
.findFragmentByTag(
"android:switcher:" + R.id.noticepager + ":" + 0)
.getArguments();

这句话表示取得viewpager第一页的fragment传来的值。


易犯错误提示: ①发送值的fragment和装入集合中的fragment不是一个同一个fragment对象。这样会产生fragment is already active的错误。

                             ②发送值得时候给fragment添加了标签Tag,例如: f.setArguments(bundle);       

                                                                                                                      fm.beginTransaction().add(one, "179521" ).commit();

                                 这样会产生unable change fragment's Tag的错误。

fragment向activity传值可以这样做:首先在fragment中写一个接口,示例:

                public interface sendjudge {
              public void sendmessage(int level);  //level是要传的值
         }

然后再 重写onAttach()

 @Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
try {
listen = (sendjudge) activity;//这里listen是声明的接口变量
} catch (ClassCastException e) {
// TODO: handle exception
throw new ClassCastException(getActivity().getClass().getName()
+ " must implements interface MyListener");
}

}

然后再需要传递值得地方调用接口里面的方法,示例:

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
context = getActivity();
listen.sendmessage(1);//调用接口中的方法
}


然后再activity中实现这个接口并重写接口里面的方法,示例:

@Override
public void sendmessage(int level) {
// TODO Auto-generated method stub
System.out.println("levellevellevellevel" + level);
if (level == 1) {
two.setArguments(bundle);
} else {
System.out.println("nnonoononononono");
}
}

这样就完成了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值