Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中从一个片段更新另一个片段?_Android_Android Fragments_Android Viewpager - Fatal编程技术网

如何在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
,您应该将实例保存为成员,然后更新此成员实例。

我已经创建了一个接口。来自第二个片段的处理程序再次调用第二个片段的新实例