当前位置: 首页 > 面试题库 >

Android fragment之间传递数据的方式?

柴琦
2023-03-14
本文向大家介绍Android fragment之间传递数据的方式?相关面试题,主要包含被问及Android fragment之间传递数据的方式?时的应答技巧和注意事项,需要的朋友参考一下

方法一:

1、在MainFragment中设置一个setData()方法,在方法中设置更改按钮名称; //MainFragment.java文件中

public void setData(String string) {

bt_main.setText(string);

}

2、在MenuFragment中的ListView条目点击事件中通过标签获取到MainFragment,并调用对应的setData()方法,将数据设置进去,从而达到数据传递的目的。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

MainFragment mainFragment =

(MainFragment) getActivity()

.getSupportFragmentManager()

.findFragmentByTag("mainFragment");

mainFragment.setData(mDatas.get(position));

}

});

只需上面区区两步即可达到数据传递的目的。 方法二: 采取接口回调的方式进行数据传递。

step1: 在Menuragment中创建一个接口以及接口对应的set方法:

//MenuFragment.java文件中
public interface OnDataTransmissionListener {
	public void dataTransmission(String data);
}

public void setOnDataTransmissionListener(OnDataTransmissionListener mListener) {
	this.mListener = mListener;
}

step2: 在MenuFragment中的ListView条目点击事件中进行接口进行接口回调

//MenuFragment.java文件中
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


 

  • 方法二:采取接口回调的方式进行数据传递
if (mListener != null) {
    mListener.dataTransmission(mDatas.get(position));
});

step3: 在MainActivity中根据menuFragment获取到接口的set方法,在这个方法中进行进行数据传递,具体如下:

//在MainActivity.java中
menuFragment.setOnDataTransmissionListener(new MenuFragment.OnDataTransmissionListener() {
    @Override
    public void dataTransmission(String data) {
   		 mainFragment.setData(data); //注:对应的mainFragment此时应该要用final进行修饰
    }
});

通过上面的三步也可以轻松做到Fragment数据之间的传递。 方法三: 使用三方开源框架:EventBus 那么问题来了:EventBus是个啥东西??? 简单来说,EventBus是一款针对Android优化的发布/订阅(publish/subscribe)事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。比如请求网络,等网络返回时通过Handler或Broadcast通知UI,两个Fragment之间需要通过Listener通信,这些需求都可以通过EventBus实现。 下面我们就用EventBus来实现以下Fragment之间的数据传递:

step1:引入EventBus compile 'org.greenrobot:eventbus:3.0.0' step2:注册事件接收者 这里MainFragment是要接收MenuFragment发送来的数据,所以我们在MainFragment中的onCreateView()方法中进行注册: EventBus.getDefault().register(this); step3:发送事件 注:发送事件之前其实还有一步定义事件类型,这里我们传递的数据只有一个类型,所以这一步取消了。 MenuFragment发送数据给MainFragment,所以我们在MenuFragment中将要传递的数据进行发送事件操作:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    EventBus.getDefault().post(mDatas.get(position));
}
});

step4:接收消息并处理 在MainFragment中我们接收来自MenuFragment传递过来的数据,并进行对应的处理(注:EventBus 3.0版本这一步必须要写注解@Subscribe (与2.4版本有所区别)):

@Subscribe
public void onEvent(String data) {
	bt_main.setText(data);
}

通过上面这一步即可完成数据之间的传递,需要注意的是在销毁的时候我们要注销事件接收。 step5:注销事件接收

//MainFragment.java中
@Override
public void onDestroy() {
	super.onDestroy();
	EventBus.getDefault().unregister(this);
}

以上五步完成了Fragment之间的数据传递,看似比上面两个方法要复杂的多,但当我们涉及到复杂的Fragment之间数据传递(例如Fragment中嵌套多层Fragment)时,就会体会到EventBus的爽快之处~~~这里不进行赘述了。

 类似资料:
  • 本文向大家介绍vue.js组件之间传递数据的方法,包括了vue.js组件之间传递数据的方法的使用技巧和注意事项,需要的朋友参考一下 前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用。如何传递数据也成了组件的重要知识点之一。 组件 组件与组件之间,还存在着不同的关系。父子关系与兄弟关系(不是父子的都暂称为兄弟吧)。 父子组件 父子

  • 我是Java的新手,正在尝试制作一个基本的体质量计算器。我的问题是我需要问问题,转换度量值,然后将它传递给另一个方法,然后在一个单独的方法中显示结果。我在下面添加了代码,但每次都返回一个1.0作为答案。 更新的代码,现在正在获取;输入体重(磅):180输入身高(英寸):68计算出的体重指数为:1.1415618118905313 E-5建立成功(总时间:3秒)

  • 我想把我的数据传递给其他的viewcontroller,但我做不到。我的密码在下面。ViewControllers的屏幕截图在这里。当用户写出他们的名字和密码时,我想传递另一个用户的数据,但他们之间还有一个viewcontroller。我认为这是一个问题,但我可以移除这个额外的视图控制器,所以我想了解如何才能把这些数据传递给其他的一个? 第一个viewcontroller的代码 第二个viewco

  • 问题内容: 抱歉,如果我的问题是菜鸟。我正在使用pgsql 8.4运行Django 1.2,并且需要在从用户处获得输入后运行Java程序,进行一些计算并将结果返回给用户。 我是否可以知道在Java和Python Django之间传递数据的最佳方法是什么,以便解决上述情况?我听说过Jython,但是根据Django文档,它需要扩展名jython- Django,但目前不支持django1.2.x。我

  • 问题内容: 我有一个C结构。 我想将数据从Java映射到C结构,如何使用JNI进行处理?我不会编程Java代码。Java程序员只是想知道他应该以哪种形式向我发送数据?他是否应该期待更多细节 我目前正在通过用包含2列的CSV文件填充结构实例来测试我的代码。 我也想从我的C代码向Java应用程序返回3个double值。 问题答案: 向您的Java程序员提供以下声明: 在您的C代码中,您将能够使用传递的

  • 问题内容: 我打算学习来自许多不同的MV *框架的AngularJS。我喜欢框架,但是在控制器之间传递数据时遇到了麻烦。 假设我有一个带有一些输入(input.html)的屏幕和一个控制器,比方说InputCtrl。 此视图上有一个按钮,可将您带到另一个屏幕,例如,使用控制器ApproveCtrl批准(approve.html)。 此ApproveCtrl需要来自InputCtrl的数据。在较大的