フラグメントトランザクションを実行するアクティビティがあります
DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transaction.addToBackStack(null);
transaction.commit();
それはうまくいきます。これで、アクティビティ内で、newFragmentのレイアウトで置き換える必要のある動的文字列がわかりました。私はtransaction.commit()の後に次のようなものを呼び出すことができると思いました
newFragment.setMyString("my dynamic value");
そして、newFragment.javaには
public void setMyString(String s)
{
TextView tv = (TextView) getActivity().findViewById(R.id.myobject);
tv.setText(s);
}
重要なのは、getActivity()がnullを返すことです。レイアウト要素を見つけるために必要なコンテキストを取得するにはどうすればよいですか?
編集:
これが最もクリーンな方法のように思われるので、私はバンドルを使用してルートをたどろうとします。だから私は私のコードを変更しました:
Bundle b = new Bundle();
b.putString("text", "my dynamic Text");
DetailFragment newFragment = new DetailFragment();
transaction.replace(R.id.mylist, newFragment);
transaction.addToBackStack(null);
transaction.commit();
私のフラグメントonCreateViewは次のようになります。
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.mylayout, container, false);
TextView t = (TextView) v.findViewById(R.id.texttobereplaced);
t.setText(savedInstanceState.getString("text");
}
savedInstranceStateが空のようです。バンドルはどこにありますか?
Edit2:
応答でgetArguments()を見逃しました。現在動作しています。