2

Fragment から Activity 内の Button にアクセスする方法。実際には myButton を無効に設定しましたが、radioButtons の一部がクリックされたときに myButton を有効に設定したいですか?

4

2 に答える 2

5

あなたが試すことができるいくつかのことがあります。最初のものはgetActivity().findViewByIt(id)を取得するために使用するものButtonで、これは機能すると思いますが、それをホストするレイアウトFragmentについて想定するため、エンジニアリングの面からは良い解決策ではありません。2 つ目は、 here でActivity説明されているように、コールバック インターフェイスを提供することです。チェックボックスの状態が変わるたびに、コールバック メソッドを呼び出すだけです。このアプローチは、コールバック インターフェイスを実装する任意のアクティビティで自由に再利用できるため、優れています。最後になりましたが、可能であればフラグメント内に配置するようにしてください。FragmentButton

于 2013-03-01T22:10:07.783 に答える
4

次に例を示します。

MyFragment.java 内

public MyFragment extends Fragment {
    public interface Callback {
        public void onRadioButtonClicked(View radioButton);
    }

    private Callback callback;

    @Override
    public void onAttach(Activity ac) {
        super.onAttached(ac);
        callback = (Callback)ac;
    }

    @Override
    public void onDetach() {
        callback = null;
        super.onDetach();
    }

    ....
    ....
       radioButton.setOnClickListener(new OnClickListener() {
           public void onClick(View view) {
               if (callback != null) {
                   callback.onRadioButtonClicked(view);
               }
           }
       });
}

そして、MyFragment をホスト/含む MyActivity.java では:

public MyActivity extends Activity implements MyFragment.Callback {

    ...
    @Override
    public void onRadioButtonClicked(View radioButton) {
        // The radiobutton in MyFragment has been clicked
        myButton.setEnabled(true); // or something like this.
    }

}

この設計では、MyFragment.Callbackインターフェイスを使用して、ホスティング アクティビティの詳細をフラグメントから遠ざけ、アクティビティが実装している限り、任意のアクティビティでフラグメントをホストできるようにしますMyFragment.Callback

于 2013-03-01T22:12:57.500 に答える