[英]Modifying view inside a fragment inside other fragment doesn't works
我试图修改来自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);
}
当我从容器片段中调用该方法时,它会进入该方法,但不会进行任何更改。 为什么会发生这种事情?
您不能也不应让片段彼此直接通信。 它们之间的所有通信都必须经过活动或父片段(如果同时托管它们)。
有几种方法可以做到这一点。 这是一种方法 。
我个人更喜欢与广播接收器一起工作。 该方法基本上是:
告诉我我的解释不够清楚,我将提供一个工作代码示例。
祝好运! :)
-编辑-
好的,理解之后,您将尝试从其父片段的一个子片段中调用一个方法,这是一个具有广播接收器的方法,该方法应该可以正常工作:
当您需要在子片段中调用方法时,父片段会在一些意图过滤器上发送广播。
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()
的intent过滤器,然后将其注销到子片段的onPause()
。
getActivity().registerReceiver(receiver, new IntentFilter(some_string));
getActivity().unregisterReceiver(receiver);
最后,我发现了问题。 问题是我在父片段中有两个同名的chebox。 而且当我选中一个复选框时,它不能正常工作。 对不起,这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.