Android アプリに 2 つのフラグメントを持つ 1 つのアクティビティがあります。最初のフラグメントには、ボタン (btnA) を配置しました。2 番目に、TextView (txtB) を置きます。
最初のアクティビティのボタンを押して、2 番目のフラグメントの TextView にテキストを設定するにはどうすればよいですか?
Thx、私はAndroidアプリ開発が初めてです
JoskXP
Android アプリに 2 つのフラグメントを持つ 1 つのアクティビティがあります。最初のフラグメントには、ボタン (btnA) を配置しました。2 番目に、TextView (txtB) を置きます。
最初のアクティビティのボタンを押して、2 番目のフラグメントの TextView にテキストを設定するにはどうすればよいですか?
Thx、私はAndroidアプリ開発が初めてです
JoskXP
ここで説明されている Android のベスト プラクティスに従います。
これは Graeme のソリューションよりも少し冗長ですが、フラグメントを再利用できます。(別の画面で FragmentWithButton を使用することができ、ボタンは別のことを行うことができます)
2 つのフラグメント (FragmentWithButton
とFragmentWithText
) と 1 つのアクティビティ ( MyActivity
)があります。
でインターフェイス FragmentWithButtonHost
を作成しFragmentWithButton
ます。
public class FragmentWithButton extends Fragment {
FragmentWithButtonHost host;
public interface FragmentWithButtonHost{
public void onMyButtonClicked(View v);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
host = (FragmentWithButtonHost) activity;
}
catch (ClassCastException e) {
// TODO Handle exception
}
}
/**
* Click handler for MyButton
*/
public void onMyButtonClick(View v) {
host.onMyButtonClicked(v);
}
}
アクティビティからテキストを設定するパブリックメソッドを作成します。FragmentWithText
public class FragmentWithText extends Fragment{
...
public void setText(String text) {
// Set text displayed on the fragment
}
}
アクティビティがインターフェイスを実装していることを確認し、メソッドFragmentWithButtonHost
を呼び出します。setText
public MyActivity implements FragmentWithButtonHost {
...
@Override
public void onMyButtonClicked(View v) {
getFragmentWithText().setText("TEST");
}
public FragmentWithText getFragmentWithText() {
// Helper method to get current instance of FragmentWithText,
// or create a new one if there isn't any
}
}
さて、あなたはこのようなことをすることができます:
アクティビティで、両方のフラグメントへの公開リンクを提供します。
public FragmentNumberOne getFragmentOne() {
return fragOne;
}
public FragmentNumberTwo getFragmentTwo() {
return fragTwo;
}
次に、フラグメント 1TextView
のクラスでへのアクセサを提供します。Fragment
public TextView getTextView() {
return mTextView;
}
オリジナルFragment
では、次を使用できます。
((MyActivity)getActivity()).getFragmentOne().getTextView().setText("Hello");