Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 在其他片段内修改片段内的视图不会';t工作_Android_Android Fragments - Fatal编程技术网

Android 在其他片段内修改片段内的视图不会';t工作

Android 在其他片段内修改片段内的视图不会';t工作,android,android-fragments,Android,Android Fragments,我试图修改fragment1中来自其他fragment2(fragment1的父级)的视图,调用fragment1的公共方法,但不起作用 在容器片段a中,执行以下操作: AddressEditSubviewFragment profesionalEditFragment = new AddressEditSubviewFragment(); notificationsEditFragment = new AddressEditSubviewFragment();

我试图修改fragment1中来自其他fragment2(fragment1的父级)的视图,调用fragment1的公共方法,但不起作用

在容器片段a中,执行以下操作:

AddressEditSubviewFragment profesionalEditFragment = new AddressEditSubviewFragment();
        notificationsEditFragment = new AddressEditSubviewFragment();
        fragmentTransaction.add(R.id.addresses_edit_fragment_notifications_edit_fl, notificationsEditFragment);
fragmentTransaction.commit();

CheckBox notCB = (CheckBox) view.findViewById(R.id.addresses_edit_fragment_notifications_same_cb);
        notCB.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                notificationsEditFragment.disableEnableEdit(true);

            }
        });
片段中更改视图状态的方法如下:

public void disableEnableEdit(boolean disable) {

        streetET.setKeyListener(null);
        streetET.setCursorVisible(false);
        streetET.setPressed(false);
        streetET.setFocusable(false);
        numberET.setFocusable(!disable);
        numberET.setEnabled(!disable);
        numberET.setText("pruebas");
        floorET.setVisibility(View.GONE);
        buildingET.setFocusable(!disable);
        buildingET.setEnabled(!disable);
        pcET.setFocusable(!disable);
        pcET.setEnabled(!disable);



    }

当我从容器片段调用该方法时,它会进入该方法,但不会更改任何内容。为什么会发生这种情况?

您不能也不应该让片段直接相互通信。它们之间的所有通信都必须通过活动或父片段(如果它同时承载了它们)

有几种方法可以做到这一点

我个人更喜欢和你一起工作。方法基本上是:

  • 让fragment1调用活动中的某个方法
  • 当它完成时,让该方法在某个意图过滤器上发送广播
  • 在fragment2上实现一个广播接收器,它在接收广播时做一些事情
  • 让fragment2根据您的意愿在所述意向过滤器上注册和注销接收者(通常在onResume和onPause上分别注册)
  • 如果我的解释不够清楚,请告诉我,我将提供一个工作代码示例

    祝你好运!:)

    ---编辑---

    好的,在理解您试图从其父片段调用子片段中的方法后,下面是一个使用广播接收器的方法,应该可以工作:

    每当您需要调用子片段中的方法时,父片段就会在某个意图过滤器上发送广播

    Intent intent = new Intent();
    intent.setAction(some_string);
    getActivity().sendBroadcast(intent);
    
    在子片段中实现一个广播接收器,该子片段在其
    onReceive()
    中调用该方法

    将接收器注册到子片段的
    onResume()
    中的意图过滤器,并在子片段的
    onPause()
    中注销它


    最后,我发现了问题所在。问题是我在父片段中有两个具有相同id的复选框。当我选中一个复选框时,它就不能正常工作。很抱歉提出这个问题。

    我尝试修改片段1的片段是他的父片段。我改变了问题,因为ir不太清晰啊,是的,我曾经尝试过这样做,但遇到了问题。我编辑了我的答案,并添加了一个对我有用的代码示例。祝你好运!:)但问题不在于该方法不调用。当y调用该方法时,它会进入该方法,但de视图不会更新
    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            doStuff();
        }
    };
    
    getActivity().registerReceiver(receiver, new IntentFilter(some_string));
    getActivity().unregisterReceiver(receiver);