Fragment向activity传值的接口回调方法
2016-03-12 10:08
417 查看
activity和fragment之间的数据传递主要分为三种:
(2) Fragment传递数据给Activity
(3) Fragment 与Fragment之间传递数据
今天主要介绍第二种传值方式Fragment向activity传值。这种传值方式用到了接口回调的方法
主要分为三步
Step 1:定义一个回调接口:(Fragment中)
[b] Step 2:接口
4000
回调(Fragment中)[/b]
[b][b] Step
3:使用接口回调方法读数据(Activity中)[/b][/b]
上述代码看不懂的接下来我们以一个实例来进行讲解
在fragment中
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main,null);
Button button = (Button) view.findViewById(R.id.btn_click);
button.setOnClickListener(this);
editText = (EditText)view.findViewById(R.id.et_content);
return view;
}
@Override
public void onClick(View v) {
//获取EditText里面的输入值
content = editText.getEditableText().toString();
//调用这个接口方法
callback.getResult(content);
}
//步骤1:定义一个回调接口
public interface CallBack{
public void getResult(String content);
}
//步骤2:设置监听器
public void setCallBack(CallBack callBack) {
this.callback = callBack;
}
在Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainFragment fragment = (MainFragment) getFragmentManager().findFragmentById(R.id.fragment_main);
//步骤3:设置监听器,实现接口里面的方法
fragment.setCallBack(this);
tvShow = (TextView)findViewById(R.id.tv_show);
}
@Override
public void getResult(String content) {
tvShow.setText(content);
}
其中步骤2,3也可以合并为一步
在Fragment中重写OnAttach()方法
public void OnAttach(Activity activity){
<pre name="code" class="java"> callback =(CallBack)getActivity;
}
Activity在加载fragment时会调用OnAttach方法,这样也能达到设置监听的目的
在学习过程中还发现了另一种传递数据的方式就是采用Intent传值,在Fragment中使用Intent传值,并跳转到Activity中,在activity中依然能够接收到数据。
比如:
在Fragment中设置一个按钮的监听,点击的时候跳转并进行传值
{
Intent intent=new Intent();
intent.setClass(getActivity(), MainActivity2.class);
Bundle bundle=new Bundle();
bundle.putString("name","Jack");
intent.putExtras(bundle);
startActivity(intent);
}
在Activity中进行接收,并打印结果
Intent intent=getIntent();
Bundle bundle = intent.getExtras();
String name=bundle.getString("name");
Log.i("------->", "onCreate: "+name);
(1) Activity传递数据给Fragment
在Activity中创建Bundle数据包,调用Fragment实例的setArguments(bundle) 从而将Bundle数据包传给Fragment,然后Fragment中调用getArguments获得 Bundle对象,然后进行解析就可以了
(2) Fragment传递数据给Activity
(3) Fragment 与Fragment之间传递数据
其实这很简单,找到要接受数据的fragment对象,直接调用setArguments传数据进去就可以了 通常的话是replace时,即fragment跳转的时候传数据的,那么只需要在初始化要跳转的Fragment 后调用他的setArguments方法传入数据即可!
如果是两个Fragment需要即时传数据,而非跳转的话,就需要先在Activity获得f1传过来的数据, 再传到f2了,就是以Activity为媒介~
今天主要介绍第二种传值方式Fragment向activity传值。这种传值方式用到了接口回调的方法
主要分为三步
Step 1:定义一个回调接口:(Fragment中)
/*接口*/
public interface CallBack{
/*定义一个获取信息的方法*/
public void getResult(String result);
[b] Step 2:接口
4000
回调(Fragment中)[/b]
/*接口回调*/
public void getData(CallBack callBack){
/*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/
String msg = editText.getText().toString();
callBack.getResult(msg);
[b][b] Step
3:使用接口回调方法读数据(Activity中)[/b][/b]
/* 使用接口回调的方法获取数据 */
leftFragment.getData(new CallBack() {
@Override
public void getResult(String result) { /*打印信息*/
Toast.makeText(MainActivity.this, "-->>" + result, 1).show();
}
});
上述代码看不懂的接下来我们以一个实例来进行讲解
在fragment中
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main,null);
Button button = (Button) view.findViewById(R.id.btn_click);
button.setOnClickListener(this);
editText = (EditText)view.findViewById(R.id.et_content);
return view;
}
@Override
public void onClick(View v) {
//获取EditText里面的输入值
content = editText.getEditableText().toString();
//调用这个接口方法
callback.getResult(content);
}
//步骤1:定义一个回调接口
public interface CallBack{
public void getResult(String content);
}
//步骤2:设置监听器
public void setCallBack(CallBack callBack) {
this.callback = callBack;
}
在Activity中
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MainFragment fragment = (MainFragment) getFragmentManager().findFragmentById(R.id.fragment_main);
//步骤3:设置监听器,实现接口里面的方法
fragment.setCallBack(this);
tvShow = (TextView)findViewById(R.id.tv_show);
}
@Override
public void getResult(String content) {
tvShow.setText(content);
}
其中步骤2,3也可以合并为一步
在Fragment中重写OnAttach()方法
public void OnAttach(Activity activity){
<pre name="code" class="java"> callback =(CallBack)getActivity;
}
Activity在加载fragment时会调用OnAttach方法,这样也能达到设置监听的目的
在学习过程中还发现了另一种传递数据的方式就是采用Intent传值,在Fragment中使用Intent传值,并跳转到Activity中,在activity中依然能够接收到数据。
比如:
在Fragment中设置一个按钮的监听,点击的时候跳转并进行传值
{
Intent intent=new Intent();
intent.setClass(getActivity(), MainActivity2.class);
Bundle bundle=new Bundle();
bundle.putString("name","Jack");
intent.putExtras(bundle);
startActivity(intent);
}
在Activity中进行接收,并打印结果
Intent intent=getIntent();
Bundle bundle = intent.getExtras();
String name=bundle.getString("name");
Log.i("------->", "onCreate: "+name);
结果如下,显示传值成功。 03-11 20:52:51.785 24433-24433/com.wangdong.fragmenttest I/------->: MainActivity2 onCreate: Jack
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories