[英]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.