我是一只自学java以及安卓2个月的菜鸟程序员,目前暂时学到Fragment,踩了无数个坑~~~
在网上看了无数的fragment与activity交互的文章,对于我这样的java初学者来说,还是有点困难,经过了一天多的困难,终于理解了,分享给大家,我是菜鸟 轻喷。。。
强调一个,从fragment传送数据到activity,需要通过接口回调才能实现,但是activity传送数据到fragment比如在activity内要改变某一个fragment的中某一个控件的值,
可以直接在fragment中定义一个方法
public void setText(String s) { textView.setText(s); }
通过直接调用的方法就可以实现,不需要再用接口回调
对象命.setText(s);
我这里是titlefragment1,contentfrgment1(因为之前写过一次,各种报错,重写了,又懒得新建工程,直接后面+了个1) main3avtivity 三个布局
如上面图片,我要实现的是在titlefrgment点击一个按钮。通过main3activity 传送数据,改天contextfragment中textview中的值
两个button按钮在titlefragment中,右边的textview在contextfrgment中。
参数回调的接口,我想大家可以通过很多网上的文章学习到,我也是看了好久,毕竟基础不好,慢慢理解吧。
在按钮发生事件的fragment即titlefragment中定义一个接口
public interface TitleFragmentOnclickListener { void ChangeValue(String s); }
然后在main3activity中实现你的接口
@Override public void ChangeValue(String s) { contentFragment1= (ContentFragment1) getFragmentManager().findFragmentById(R.id.content_layout); contentFragment1.setText(s); }大家注意了 坑就在这里。
我的两个fragment是动态添加的
public void AddTitleFragment(){ FragmentManager fm=getFragmentManager(); FragmentTransaction ft=fm.beginTransaction(); ft.replace(R.id.title_layout,titleFragment1); ft.replace(R.id.content_layout,contentFragment1); ft.commit(); }
注意了这个是错误的!!!!
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); AddTitleFragment(); contentFragment1= (ContentFragment1) getFragmentManager().findFragmentById(R.id.content_layout); }刚开始我在oncreate的时候先动态添加fragment,然后直接在这里获取了contentfragment所以的framlayout,导致最后在调用settext的时候 一直出现null object
contentFragment1= (ContentFragment1) getFragmentManager().findFragmentById(R.id.content_layout);然后我把这句话放到了接口实现中,才没有出现空值的问题,其实就是当按钮点击的时候再去获取对象,具体原因我也无法解释,,,我还是菜鸟!!
@Override public void ChangeValue(String s) { contentFragment1= (ContentFragment1) getFragmentManager().findFragmentById(R.id.content_layout); contentFragment1.setText(s); }
把三个布局文件也给你们吧。。
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.rkq.gamermaster.Main3Activity"> android:id="@+id/title_layout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2"> android:id="@+id/content_layout" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="3">
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textview" android:text="11111"/>
xml version="1.0" encoding="utf-8"?>xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">