Android官方培训课-Fragment间的通信
来源:互联网 发布:网络互动活动 编辑:程序博客网 时间:2024/04/27 22:41
Author : jianlong.zhang
Date : 6/6/2017
Desc : 官方培训课程学习,Communicating with other fragment(fragment之间的通信)。
Thanks: Goole 官方培训教程
Tab:
* 这节官方课程其实用处不是很大,因为我们可能会用第三方通信。
* new fragment实例的时候要使用无参函数
* 想要传递参数,要是用setArguments()来传递
这里简单介绍一下官方的思路。
- 利用接口实现发信Fragment与Activity通 信将要传递的内容通过接口传递给Activity.
- 再由activity启动收信Fragment时,将信作为收信Fragment的Arguments,传递给收信Fragment.
- 收信fragment启动后在onCreateView()方法中,通过getAguments获取信得内容。
发信接口
- 在发信fragment中创建 接口。
interface MessageHandler { void handMessage(String message); }
- 让activity 实现接口
- 将信 作为arguments 设置给收信Fragment
SecFragment instance = new SecFragment(); Bundle bundle = new Bundle(); bundle.putString(MESSAGE, message); instance.setArguments(bundle);
- 收信fragment 接收信
String message = getArguments().getString(MESSAGE);
完整代码如下:
- 发信fragment
package com.zhouzhouwang88.shoppingclient.test;import android.content.Context;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.text.TextUtils;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;import com.zhouzhouwang88.shoppingclient.R;/** * A simple {@link Fragment} subclass. */public class FirstFragment extends Fragment implements View.OnClickListener { public static String TAG = "FirstFragment"; private EditText contentEd; private Button sendBtn; private MessageHandler callBack; @Override public void onClick(View v) { if (TextUtils.isEmpty(contentEd.getText().toString())) { callBack.handMessage("没有输入值"); return; } callBack.handMessage(contentEd.getText().toString()); } interface MessageHandler { void handMessage(String message); } @Override public void onAttach(Context context) { super.onAttach(context); callBack = (FragmentStudyActivity) context; } public static FirstFragment instance() { return new FirstFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_first, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); contentEd = (EditText) view.findViewById(R.id.ed_content); sendBtn = (Button) view.findViewById(R.id.btn_send_content); sendBtn.setOnClickListener(this); }}
- activity实现接口
package com.zhouzhouwang88.shoppingclient.test;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.FrameLayout;import com.zhouzhouwang88.shoppingclient.R;public class FragmentStudyActivity extends FragmentActivity implements View.OnClickListener, FirstFragment.MessageHandler { private FrameLayout fragmentContainer; private Button showFirstBtn, showSecBtn; private FirstFragment mFirstFragment; private SecFragment mSecFragment; private String message; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment_study); fragmentContainer = (FrameLayout) findViewById(R.id.fl_fragment_container); showFirstBtn = (Button) findViewById(R.id.btn_show_first); showSecBtn = (Button) findViewById(R.id.btn_show_sec); showFirstBtn.setOnClickListener(this); showSecBtn.setOnClickListener(this); mFirstFragment = FirstFragment.instance(); if (null != fragmentContainer) { mFirstFragment.setArguments(getIntent().getExtras()); getSupportFragmentManager() .beginTransaction() .add(fragmentContainer.getId(), mFirstFragment, FirstFragment.TAG) .commitAllowingStateLoss(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_show_first: showSelectFragment(FirstFragment.instance()); break; case R.id.btn_show_sec: showSelectFragment(SecFragment.instance(message)); break; } } private <T extends Fragment> void showSelectFragment(T fragment) { if (fragment.isAdded()) { return; } getSupportFragmentManager() .beginTransaction() .replace(fragmentContainer.getId(), fragment) .addToBackStack(null)//允许fragment回退 .commitAllowingStateLoss(); } @Override public void handMessage(String message) { this.message = message; }}
- 收信fragment
package com.zhouzhouwang88.shoppingclient.test;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.zhouzhouwang88.shoppingclient.R;/** * A simple {@link Fragment} subclass. */public class SecFragment extends Fragment { public static String TAG = "SecFragment"; public static final String MESSAGE = "MESSAGE"; public static SecFragment instance() { return new SecFragment(); } public static SecFragment instance(String message) { SecFragment instance = new SecFragment(); Bundle bundle = new Bundle(); bundle.putString(MESSAGE, message); instance.setArguments(bundle); return instance; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment String message = getArguments().getString(MESSAGE); Log.d(TAG, message); return inflater.inflate(R.layout.fragment_sec, container, false); }}
阅读全文
0 0
- Android官方培训课-Fragment间的通信
- Android培训---Fragment间的通信
- Android Fragment 间通信
- Android Fragment间通信
- (完结)Android官方培训课-支持不同的语言
- Android官方文档学习01多屏幕适配&Fragment间通信&Intent分享
- Android官方Training笔记:Fragment之间通过Activity通信
- Fragment间的通信
- Fragment 间的通信
- Fragment间的通信
- Fragment间的通信
- Fragment间的通信
- Fragment间的通信
- android-----Fragment之间的通信
- Android Fragment之间的通信
- Android Fragment之间的通信
- android官方培训教程
- android官方培训
- 2分钟读懂Hadoop和Spark的异同
- 04 BeautifulSoup小实例
- 414. Third Maximum Number
- jvm垃圾收集算法·
- 兼容移动端的后台管理框架
- Android官方培训课-Fragment间的通信
- TextView使用技术点(二)
- Python中的range()与array()函数
- android改变图片选中颜色
- leetcode Add Two Numbers(Java)
- 机器学习笔记(PRML)
- Java入门教程之图书管理系统(由简入繁)(九)
- Vue之$nextTick属性
- Socket Send 带多指针的结构体,变长字符串,string char[] 等等。。