我正在尝试修改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);
}
当我从容器片段调用方法时,它会进入方法,但不会改变任何内容。为什么会发生这种情况?
答案 0 :(得分:1)
你不能并且不应该让片段彼此直接沟通。它们之间的所有通信都必须通过活动或父片段(如果它们托管它们)。
有几种方法可以做到这一点。 here's one method
我个人更喜欢使用broadcastreceivers。方法基本上是:
告诉我,如果我的解释不够清楚,我将提供一个有效的代码示例。
祝你好运! :)---编辑---
好的,在理解你试图从其父片段调用子片段中的方法之后,这里有一个广播接收器应该有效的方法:
只要您需要调用子片段中的方法,父片段就会在某个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的复选框。当我检查复选框时效果不佳。对不起,这个问题。