修改其他片段内的片段内的视图不起作用

时间:2014-06-13 16:23:48

标签: android android-fragments

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

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

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);



    }

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

2 个答案:

答案 0 :(得分:1)

你不能并且不应该让片段彼此直接沟通。它们之间的所有通信都必须通过活动或父片段(如果它们托管它们)。

有几种方法可以做到这一点。 here's one method

我个人更喜欢使用broadcastreceivers。方法基本上是:

  1. 让fragment1在活动中调用一些方法。
  2. 让该方法在完成时在某个意图过滤器上发送广播。
  3. 在fragment2上实现一个广播接收器,它在接收广播时执行操作。
  4. 让fragment2注册并在所述意图过滤器上取消注册接收器(通常在onResume和onPause上完成)。
  5. 告诉我,如果我的解释不够清楚,我将提供一个有效的代码示例。

    祝你好运! :)

    ---编辑---

    好的,在理解你试图从其父片段调用子片段中的方法之后,这里有一个广播接收器应该有效的方法:

    只要您需要调用子片段中的方法,

    父片段就会在某个intent过滤器上发送广播。

    Intent intent = new Intent();
    intent.setAction(some_string);
    getActivity().sendBroadcast(intent);
    

    在子片段中实现广播接收器,该片段在其onReceive()中调用该方法。

    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            doStuff();
        }
    };
    

    将接收者注册到子片段onResume()中的意图过滤器,并在孩子的onPause()中取消注册。

    getActivity().registerReceiver(receiver, new IntentFilter(some_string));
    getActivity().unregisterReceiver(receiver);
    

答案 1 :(得分:0)

最后,我发现了问题。问题是我在父片段中有两个具有相同id的复选框。当我检查复选框时效果不佳。对不起,这个问题。