簡體   English   中英

修改其他片段內的片段內的視圖不起作用

[英]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);



    }

當我從容器片段中調用該方法時,它會進入該方法,但不會進行任何更改。 為什么會發生這種事情?

您不能也不應讓片段彼此直接通信。 它們之間的所有通信都必須經過活動或父片段(如果同時托管它們)。

有幾種方法可以做到這一點。 這是一種方法

我個人更喜歡與廣播接收器一起工作。 該方法基本上是:

  1. 在活動中讓fragment1調用某些方法。
  2. 完成后,讓該方法在某些意圖過濾器上發送廣播。
  3. 在fragment2上實現廣播接收器,該接收器在接收廣播時會進行填充。
  4. 根據需要,讓fragment2在所述意圖過濾器上注冊和注銷接收器(通常分別在onResume和onPause上完成)。

告訴我我的解釋不夠清楚,我將提供一個工作代碼示例。

祝好運! :)

-編輯-

好的,理解之后,您將嘗試從其父片段的一個子片段中調用一個方法,這是一個具有廣播接收器的方法,該方法應該可以正常工作:

當您需要在子片段中調用方法時,父片段會在一些意圖過濾器上發送廣播。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM