Android_Fragment和Activity之间的通信
Fragment 的生命周期是随着activity变化而变化的。
如果activity要给在运行的时候给fragment传人数据则需要fragment实现一个自定义的接口,并且实现接口里面的方法,在activity里面保存这个接口并且在需要传人数据的时候调用这个方法即可。
如果fragment运行的时候需要给activity传数据了?activity先实现这个接口,然后在fragment里面重写onAttach(Activity act)这个方法,并在这个方法里面讲activity强制转换为接口类,然后在fragment使用的时候调用这个接口类的方法。
请看下面的例子:
activity给fragment里面传人数据:
public class MainActivity extends Activity{
private TestFragment fragment;//fragment
private UpdateFragment updateFragment;//fragment实现的接口
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initView();
}
private void initView() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragment = new TestFragment();
updateFragment = fragment;
fragmentTransaction.add(R.id.main, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
//改变fragment里面textView的值
updateFragment.setData("王五");
super.onResume();
}
}
接口类
public interface UpdateFragment {
void setData(String str);
}
Fragment类:
public class TestFragment extends Fragment implements UpdateFragment{
private View view;
private TextView txt;
public TestFragment() {
super();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == view){
view = inflater.inflate(R.layout.activity_main, container, false);
txt = (TextView)view.findViewById(R.id.tv);
}
return view;
}
@Override
public void setData(String str) {
if (null != txt) {
txt.setText(str);
}
}
}
Fragment给activity传入数据demo:
Activity类:
public class MainActivity extends Activity implements UpdateFragment{
private static final String TAG = MainActivity.class.getSimpleName();
private TestFragment fragment;//fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initView();
}
private void initView() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragment = new TestFragment();
fragmentTransaction.add(R.id.main, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void setData(String str) {
if (null != str ){
Log.d(TAG, "setData:"+str);
}
}
接口类和上面的是一样的就不写了
Fragment类:
public class TestFragment extends Fragment{
private View view;
private TextView txt;
private Button btn;
private UpdateFragment updateFragment;
public TestFragment() {
super();
}
@Override
public void onAttach(Activity activity) {
try {
updateFragment = (UpdateFragment)activity;
} catch (Exception e) {
e.printStackTrace();
}
super.onAttach(activity);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == view){
view = inflater.inflate(R.layout.activity_main, container, false);
txt = (TextView)view.findViewById(R.id.tv);
btn = (Button)view.findViewById(R.id.btn);
btn.setOnClickListener(clickListener);
}
return view;
}
private OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (null != txt) {
updateFragment.setData(txt.getText().toString());
}
}
};
}
Android_Fragment和Activity之间的通信的更多相关文章
- Activity之间的通信
通常Activity之间的通信有三种方式:单向不传参数通信.单项传参数通信和双向通信. 这几种传递方式都需要通信使者Intent.以下将用代码来辅助理解. 1.单向不传递参数通信 public cla ...
- Android系列之Fragment(三)----Fragment和Activity之间的通信(含接口回调)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Fragment的生命周期和Activity之间的通信以及使用
Fragment通俗来讲就是碎片,不能单独存在,意思就是说必须依附于Activity,一般来说有两种方式把Fragment加到Activity,分为静态,动态. 静态即为右键单击,建立一个Fragme ...
- Android中BroadCast与Activity之间的通信
在看本文之前,假设你对于Android的广播机制不是非常了解.建议先行阅读我转载的一篇博文:图解 Android 广播机制. 因为本案例比較简单,故直接在此贴出代码,不做过多的阐述. 先上效果截图: ...
- Fragmen和Activity之间的通信--接口和实现的分离(转)
Fragmen和Activity之间的通信--接口和实现的分离(转) 分类: Android平台 在平板的开发过程中通常都会采用多个Fragment的实现方式,通常有一个为list的Fragm ...
- 【Android 应用开发】Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- Android中两个Activity之间简单通信
在Android中,一个界面被称为一个activity,在两个界面之间通信,采用的是使用一个中间传话者(即Intent类)的模式,而不是直接通信. 下面演示如何实现两个activity之间的通信. 信 ...
- Activity生命周期 与 Activity 之间的通信
一. Activity生命周期 上图 1. Activity状态 激活状态 : Activity出于前台 , 栈顶位置; 暂停状态 : 失去了焦点 , 但是用户仍然可以看到 , 比如弹出一个对话框 , ...
- 适配器(adapter)与fragment之间、fragment与activity之间的通信问题
一.适配器(adapter)与fragment之间通信 通过本地广播进行通信 步骤如下 在adapter中代码 声明本地广播管理 private LocalBroadcastManager local ...
随机推荐
- 8. String to Integer (atoi) 字符串转成整数
[抄题]: Input: "42" Output: 42 Example 2: Input: " -42" Output: -42 Explanation: T ...
- 学习笔记《简明python教程》
学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数 ...
- (转载)Android开发——Android中常见的4种线程池(保证你能看懂并理解)
0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...
- angular2 学习
一,angular2脚手架搭建 1,安装node 2,安装淘宝镜像 npm install -g cnpm --registry=https://registry.npm.taobao.org 3,搭 ...
- POJ 3107.Godfather 树形dp
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7536 Accepted: 2659 Descrip ...
- C++学习札记(1)
指针 按别名传递 下面是个例子: #include <iostream> using namespace std; void swap(int &a,int &b) { i ...
- MFC:Tab控件嵌入对话框
1.先建立一个对话框MFC应用程序,然后在工具箱里面把Tab Control控件放到对话框中的合适位置上. 再在对话框类中,声明一个CTabCtrl变量: CTabCtrl m_tab; 变量m_ta ...
- 卷积(转自wiki百科)
维基百科,自由的百科全书 图示两个方形脉冲波的卷积.其中函数 "g" 首先对 反射,接着平移 "t" ,成为 .那么重叠部份的面积就相当于 "t& ...
- 《mysql必知必会》学习_第22章_20180809_欢
第22章:使用视图,视图是虚拟的表,以表形式呈现的是你查询的结果.并不是说在数据库里面真的存在这个表,但是是真的存在这些数据. select cust_name,cust_contact from c ...
- 利用ArcGIS-Server瓦片制作离线地图包(*.tpk)_详细流程
1.写在前面 本人是综合了好几个资料才最终制作成功,在这个过程中发现网上好多博客写的步骤不是很详细,因此就把自己的详细制作步骤全部分享出来,可以供需要的小伙伴参考. (1)本文档不讨论tpk文件的详细 ...