学习之路之Fragment和Fragment之间的传值
来源:互联网 发布:手机fps帧数显示软件 编辑:程序博客网 时间:2024/05/17 00:57
第一:先把FragmentA中的数据传到绑定的Activity中, 然后再把Activity的值传到FragmentB中,实现两个Fragment之间的传值;
Activity和Fragment之间的传值和可以利用接口回调的机制进行传值,具体的代码如下
先让Activity实现回调的接口并重写方法
public class MainActivity extends AppCompatActivity implements FragmentA.CallBackFragmentA{ private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); FragmentManager manager = getFragmentManager(); FragmentTransaction beginTransaction = manager.beginTransaction(); beginTransaction.add(R.id.rl, new FragmentA()); beginTransaction.commit(); } @Override public void dataHand(String s) { if (!TextUtils.isEmpty(s)) { tv.setText(s); } }}
在Fragment的类中有一个回调接口的对象(即Activity) 并实例化,然后调用接口中的方法,这时,其实是在执行Activity中重写的接口方法;
public class FragmentA extends Fragment { private EditText et; private Button bt; CallBackFragmentA callBackFragmentA; @Override public void onAttach(Activity activity) { super.onAttach(activity); callBackFragmentA = (CallBackFragmentA) activity; } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view= inflater.inflate(R.layout.item, container, false); bt = (Button) view.findViewById(R.id.bt); et = (EditText) view.findViewById(R.id.et1); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String s= et.getText().toString(); callBackFragmentA.dataHand(s); } }); return view; } public interface CallBackFragmentA { public void dataHand(String s); }// public void onclick(View view) {// String s= et.getText().toString();// callBackFragmentA.dataHand(s);// }}
这里要注意buttton控件不要用OnClick方法因为Fragment是Activity中的一个控件,所以
OnClick应该在Activity中被使用,但是你的控件是在Fragment的xml文件中生成的...
第二种:直接在FragmentA的类中得到在FragmentB类中的控件,然后直接设置文本即可
具体的代码如下:
public class FragmentA extends Fragment { private EditText et; private Button bt; String s; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragmenta, container, false); bt = (Button) view.findViewById(R.id.bt); et = (EditText) view.findViewById(R.id.et); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { s= et.getText().toString();
<span style="white-space:pre"></span>//得到在FragmentB类中的TextView的控件对象 TextView tv = (TextView) getActivity().findViewById(R.id.tv);
<span style="white-space:pre"></span>//直接设置文本 tv.setText(s); } }); return view; }}第三种:在FragmentA类中得到FragmentB类的对象然后调用在FragmentB类中的方法
具体的代码如下:
public class FragmentA extends Fragment { private EditText et; private Button bt; String s; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragmenta, container, false); bt = (Button) view.findViewById(R.id.bt); et = (EditText) view.findViewById(R.id.et); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { s= et.getText().toString(); FragmentB fragmentB= (FragmentB) getFragmentManager().findFragmentById(R.id.fragment2); fragmentB.settextVable(s); } }); return view; }}
0 0
- 学习之路之Fragment和Fragment之间的传值
- 安卓学习之路之Fragment和Activity之间的传值
- Fragment系列解析之三---Fragment和Fragment、Activity之间传值
- Fragment之实现Fragment之间的通信
- Android之---Activity与Fragment之间的传值问题
- Activity和Fragment之间的传值
- 利用Fragment创建动态UI 之 Fragment之间的通信
- Fragment 之间的传值
- Fragment和Fragment之间的数据传输
- Fragment 和 Fragment 之间的通讯
- Fragment 和 Fragment 之间的通讯
- fragment之fragment与activity通讯以及fragment之间的通讯
- Android Fragment基础之动态添加Fragment 实现两个Fragment之间的通信
- Android面试篇之Activity与Fragment、Fragment与Fragment之间的通信
- Android学习之 Fragment
- android学习之fragment
- 源码学习之Fragment
- Android学习之Fragment
- 第3周项目2 - 建设“顺序表”算法库(1)
- 矩阵乘法的开销问题
- Yii 上传文件(头像)详解(三)
- nyoj 58 最少步数 【BFS】
- 日志目录下的各种类型
- 学习之路之Fragment和Fragment之间的传值
- struts中的findForward()和getinputforward()
- 单例模式(二)
- <script>alert(123);<script>
- .NET基础--do-while
- Centos快速使用yum安装mysql
- 使用Nginx的proxy_cache缓存功能取代Squid[原创]
- SQlite命令行操作数据库
- 什么是最好的学习方法