如何在android中从一个片段更新另一个片段?
我有一个视图寻呼机,它有两个不同的片段如何在android中从一个片段更新另一个片段?,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个视图寻呼机,它有两个不同的片段 switch (i) { case 0: return LineChartOdoFragment.newInstance(msg, list, text, vehiclelist); case 1: return OdoTotalKmsFragment.newInstance(text, list, vehName, false, new Od
switch (i) {
case 0:
return LineChartOdoFragment.newInstance(msg, list, text, vehiclelist);
case 1:
return OdoTotalKmsFragment.newInstance(text, list, vehName, false, new OdoTotalKmsFragment.Updateable() {
@Override
public void update(TextView total_kms, TextView vehicle_name, RecyclerView odo_recycler) {
int total = 0;
for (int i = 0; i < list.size(); i++) {
total = total + (Integer.parseInt(list.get(i).getKms()) / 1000);
}
total_kms.setText("" + total);
vehicle_name.setText(vehName);
OdoKmsAdapter adapter = new OdoKmsAdapter(getActivity(), list);
odo_recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
odo_recycler.setAdapter(adapter);
}
});
default:
return LineChartOdoFragment.newInstance(msg, list, text, vehiclelist);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//myMessage.arg1
//1 - Home page data
if (msg.arg1 == 7) {
odoReadingsModelList = (ArrayList) msg.obj;
no_result_odo.setVisibility(View.GONE);
lineChart.setVisibility(View.VISIBLE);
lineChartOdo = new LineChartOdo(odoReadingsModelList, lineChart, context);
lineChartOdo.createLineChartOdo();
//updating second fragment
OdoTotalKmsFragment.newInstance("", odoReadingsModelList, vehName, true, new OdoTotalKmsFragment.Updateable() {
@Override
public void update(TextView total_kms, TextView vehicle_name, RecyclerView odo_recycler) {
Log.e("LineChart Odo ", "Updating");
int total=0;
for (int i = 0; i < odoReadingsModelList.size(); i++) {
total = total + (Integer.parseInt(odoReadingsModelList.get(i).getKms()) / 1000);
}
total_kms.setText(""+total);
vehicle_name.setText(vehName);
OdoKmsAdapter adapter = new OdoKmsAdapter(getActivity(), odoReadingsModelList);
odo_recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
odo_recycler.setAdapter(adapter);
}
});
} else if (msg.arg1 == 8) {
String res = msg.obj.toString();
lineChart.setVisibility(View.GONE);
no_result_odo.setVisibility(View.VISIBLE);
no_result_odo.setText("" + res);
}
}
};
开关(一){
案例0:
返回LineChartOdoFragment.newInstance(消息、列表、文本、车辆列表);
案例1:
返回OdoTotalKmsFragment.newInstance(text、list、vehName、false、new OdoTotalKmsFragment.Updateable()){
@凌驾
公共作废更新(TextView总公里数、TextView车辆名称、RecyclerView odo回收器){
int-total=0;
对于(int i=0;i
现在,第一个片段有一个微调器,当选择不同的项目时,它会被更新
我要寻找的是,当第一个片段中的值被更新时,第二个片段也应该被更新。(我还在第二个中设置了一个接口。)
但第二个值从不更新并保留以前的值
如何更新这两个框架网
第一个片段调用异步任务,处理程序更新两个片段
switch (i) {
case 0:
return LineChartOdoFragment.newInstance(msg, list, text, vehiclelist);
case 1:
return OdoTotalKmsFragment.newInstance(text, list, vehName, false, new OdoTotalKmsFragment.Updateable() {
@Override
public void update(TextView total_kms, TextView vehicle_name, RecyclerView odo_recycler) {
int total = 0;
for (int i = 0; i < list.size(); i++) {
total = total + (Integer.parseInt(list.get(i).getKms()) / 1000);
}
total_kms.setText("" + total);
vehicle_name.setText(vehName);
OdoKmsAdapter adapter = new OdoKmsAdapter(getActivity(), list);
odo_recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
odo_recycler.setAdapter(adapter);
}
});
default:
return LineChartOdoFragment.newInstance(msg, list, text, vehiclelist);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//myMessage.arg1
//1 - Home page data
if (msg.arg1 == 7) {
odoReadingsModelList = (ArrayList) msg.obj;
no_result_odo.setVisibility(View.GONE);
lineChart.setVisibility(View.VISIBLE);
lineChartOdo = new LineChartOdo(odoReadingsModelList, lineChart, context);
lineChartOdo.createLineChartOdo();
//updating second fragment
OdoTotalKmsFragment.newInstance("", odoReadingsModelList, vehName, true, new OdoTotalKmsFragment.Updateable() {
@Override
public void update(TextView total_kms, TextView vehicle_name, RecyclerView odo_recycler) {
Log.e("LineChart Odo ", "Updating");
int total=0;
for (int i = 0; i < odoReadingsModelList.size(); i++) {
total = total + (Integer.parseInt(odoReadingsModelList.get(i).getKms()) / 1000);
}
total_kms.setText(""+total);
vehicle_name.setText(vehName);
OdoKmsAdapter adapter = new OdoKmsAdapter(getActivity(), odoReadingsModelList);
odo_recycler.setLayoutManager(new LinearLayoutManager(getActivity()));
odo_recycler.setAdapter(adapter);
}
});
} else if (msg.arg1 == 8) {
String res = msg.obj.toString();
lineChart.setVisibility(View.GONE);
no_result_odo.setVisibility(View.VISIBLE);
no_result_odo.setText("" + res);
}
}
};
private Handler=new Handler(){
@凌驾
公共无效handleMessage(消息消息消息){
//myMessage.arg1
//1-主页数据
如果(msg.arg1==7){
odoReadingsModelList=(ArrayList)msg.obj;
无结果设置可见性(视图已消失);
lineChart.setVisibility(View.VISIBLE);
LineChartTo=新的LineChartTo(OroReadingsModelList、lineChart、context);
createLineChartOdo();
//更新第二个片段
OdoTotalKmsFragment.newInstance(“),odoReadingsModelList,vehName,true,新OdoTotalKmsFragment.Updateable(){
@凌驾
公共作废更新(TextView总公里数、TextView车辆名称、RecyclerView odo回收器){
Log.e(“折线图Odo”,“更新”);
int-total=0;
对于(int i=0;i
用于将数据从一个片段传递到另一个片段
EventBus repo的完整示例:
EventBus分三步执行
定义事件:
public static class MessageEvent { /* Additional fields if needed */ }
准备订阅服务器:声明并注释订阅方法,可以选择指定线程模式:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
注册和注销您的订户。例如,在Android上,活动和片段通常应根据其生命周期进行注册:
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
活动后:
EventBus.getDefault().post(new MessageEvent());
有关详细信息,请阅读github上的EventBus repo示例,网址为
如果您不想使用第三方库,请使用此方法
要从另一个片段更新1个片段,可以将接口创建为回调,并在活动和第2个片段中实现。然后,您可以将数据从一个片段传递到另一个片段。我认为
OdoTotalKmsFragment.newInstance()
将始终为您提供一个新对象OdoTotalKmsFragment
,您应该将实例保存为成员,然后更新此成员实例。我已经创建了一个接口。来自第二个片段的处理程序再次调用第二个片段的新实例