Fragment向activity传值的接口回调方法
来源:互联网 发布:java中sdk 编辑:程序博客网 时间:2024/04/19 14:02
activity和fragment之间的数据传递主要分为三种:
(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);
Step 2:接口回调(Fragment中)
/*接口回调*/
public void getData(CallBack callBack){
/*获取文本框的信息,当然你也可以传其他类型的参数,看需求咯*/
String msg = editText.getText().toString();
callBack.getResult(msg);
Step 3:使用接口回调方法读数据(Activity中)
/* 使用接口回调的方法获取数据 */
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
3 0
- Fragment向activity传值的接口回调方法
- Activity通过接口向fragment传数据
- viewPager中的Fragment向其他activity传值方法|activity向activity传值方法
- activity向另一个activity的fragment传值的问题
- fragment 向所属的activity传值的时候
- fragment与activity之间的回调,用于数据更新操作(是fragment向activity里传值)
- 关于Activity向Fragment传值的问题
- Fragment与Activity之间的传值和接口回调
- Fragment和Activity通信中体现的接口回调
- 利用接口回调实现fragment与activity的通信
- 回调接口实现Activity与Fragment之间的通信
- 利用接口回调实现fragment与activity的通信
- fragment 向另一个activity传值并关闭当前activity
- fragment传值给activity:接口
- Fragment学习之使用接口回调的方式实现Fragment与Activity通信
- Fragment学习之使用接口回调的方式实现Fragment与Activity通信
- android activity向fragment通信,获取fragment的三种方法
- Fragment向另一个Fragment进行传值通过Activity来传递在同一个Activity中
- 也说TypeScript
- 写两个线程,一个线程打印 1~52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z
- hdu 1300 pearls
- Html5 手机wap开发、微信开发、APP开发的优缺点-创业者必知
- windows10 系统下为python配置numpy和scipy
- Fragment向activity传值的接口回调方法
- 第三周项目3-输出星号图(c)
- Codeforces 631B Print Check【模拟】
- runtime 消息处理机制
- 理解Android自定义的属性
- leetcode 6. ZigZag Conversion
- 约瑟夫环
- Spring中配置和读取多个Properties文件
- Core Data入门