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