Android 在其他片段内修改片段内的视图不会';t工作
我试图修改fragment1中来自其他fragment2(fragment1的父级)的视图,调用fragment1的公共方法,但不起作用 在容器片段a中,执行以下操作:Android 在其他片段内修改片段内的视图不会';t工作,android,android-fragments,Android,Android Fragments,我试图修改fragment1中来自其他fragment2(fragment1的父级)的视图,调用fragment1的公共方法,但不起作用 在容器片段a中,执行以下操作: AddressEditSubviewFragment profesionalEditFragment = new AddressEditSubviewFragment(); notificationsEditFragment = new AddressEditSubviewFragment();
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()
中调用该方法
将接收器注册到子片段的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);