Android:片段无法获得活动

我有一个活动,做一个片段交易

DetailFragment newFragment = new DetailFragment(); transaction.replace(R.id.mylist, newFragment); transaction.addToBackStack(null); transaction.commit(); 

工作正常。 现在我知道在我的活动中,我需要在newFragment中的布局中replace一个dynamicstring。 我以为我可以在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。 我怎样才能获得我需要find我的布局元素的上下文?

编辑:

我试图使用一个捆绑的路线,因为这似乎是最干净的方式。 所以我改变了我的代码:

 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是空的。 我应该在哪里find我的包?

EDIT2:

错过了答复中的getArguments()。 现在正在工作。

Solutions Collecting From Web of "Android:片段无法获得活动"

你的Fragment还没有附加到Activity ,这也意味着你的布局还没有膨胀(见片段生命周期 )。 这里最好的解决scheme是通过Fragment.setArguments(Bundle)方法将您的String值作为参数添加到Fragment 。 这可以通过Fragment.getArguments()方法在接收Fragment检索。

确保你在onAttach() getActivity()中或之后调用getActivity() ,和之前一样,它将返回null

所以我也使用相同的片段事务pipe理器和唯一的问题,我可以看到你的代码是你在你的newFragment类的onCreateView方法内定义TextView电视,然后实例化它,如下所示:

 public class AboutFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.newFragment, container, false); TextView tv = (TextView) v.findViewById(R.id.textview); return v; } public void setMyString(String s) { tv.setText(s); } } 

我知道这不是真的很有道理,但这是我如何运行我的代码,它工作正常:)

如果你需要在OnCreateView中调用getActivity,将所有的onCreateView代码移动到onActivityCreate,只剩下行

 View v = inflater.inflate(R.layout.xxxx, container, false); return v; 

在onCreateView

但我有一个有趣的情况。

在我的onActivityCreated

 Spinner s1 = (Spinner) getActivity().findViewById(R.id.bitlength); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( getActivity(), R.array.bitlengths, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); s1.setAdapter(adapter); 

有时onActivityCreated不会运行(正确!?),因此微调器s1变空。