我正在尝试编写一个片段,其中包含一个在TextView中设置内容的方法。所以我有以下片段:
public class DetailFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
// setText("set it to something");
return view;
}
public void setText(String item) {
TextView view = (TextView) getView().findViewById(R.id.detailsText);
view.setText(item);
}
}
这很好用。它显示了textview。我现在想以编程方式编辑textview中的文本。我以为我首先要从片段中编辑它。所以我有了应该能够做到的方法。当我现在取消注释setText("set it to something");
时,它会给我一个InflateException: Error inflating class fragment.
,我不知道为什么。
有人知道如何解决这个问题吗?
答案 0 :(得分:1)
这样做
class ... extends Fragment{
private TextView _myTextView;
onCreateView(...){
//inflate view
_myTextView = (TextView)view.findViewById(R.id.text_view);
editText("blablabla");
}
private void editText(String text){
_myTextView.setText(text);
}
}
您必须初始化onCreateView中的所有UI元素,以便从正在膨胀的视图中进行充气!
答案 1 :(得分:1)
如果你想在onCreateView()
中这样做,那就这样做:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
TextView tv= (TextView) view.findViewById(R.id.detailsText);
tv.setText("set it to something");
return view;
}
原因是在getView()
返回之前无法调用onCreateView()
。
或从onViewCreated()
执行此操作:
public void onViewCreated (View view, Bundle savedInstanceState){
TextView tv = (TextView) view.findViewById(R.id.detailsText);
tv.setText("set it to something");
// following will work too here
// setText("set it to something");
}