ViewPager+Fragment的传值问题


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");
}
}

这样就完成了。


智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告