为什么我们像getActivity()那样访问.findViewById()

时间:2013-03-19 04:24:16

标签: android

布局时,为Fragment定义并在setContentView()方法中使用且与Activity无关。 那么为什么我们需要Activity参考来访问它。

所以我想在ListView内创建一个Fragment。我必须在Activity布局或Fragment布局内部创建它。

嘿,尼尔,我有一个问题,因为每次我犯了一个错误,因为我正在表演

TextView txt = ( TextView ) getActivity().findViewById(R.id.txt);
txt.setText("nayak nahi , khalnayak hun mein");

oncreateView()内,所以它会产生问题,但是当我在里面实现这个时 onActivityCreated(),它正在运作,所以请你告诉我为什么会这样。

3 个答案:

答案 0 :(得分:2)

如果要通过getActivity()查找视图,则应在调用onCreateView后执行此操作,因为在调用onCreateView之前,fragment的视图为null。所以你可以这样做:

KeyAdapter instance = new MyKeyAdapter();
label.addKeyListener(instance);
 ......
 ......
if(reached()){
    label.removeKeyListener(instance);
}

答案 1 :(得分:0)

可以ListView的布局中定义Fragment。在片段中尝试这样的东西来定义替代布局

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {
    _baseView = inflater.inflate(R.layout.yourlayout, null); //where base view is your upper most parent in your layout
    return _baseView;
}

然后在您的onActivityCreated中,您可以使用_baseView.findViewById('yourListView')来设置ListView。我不知道这是不是最好的做法,但它对我来说非常适合。

答案 2 :(得分:0)

在Fragment中你应该使用它的View但是getActivity:

public View onCreateView(…){
View rootView = inflater.inflate(R.layout.listview_xml_file, container, false);
ListView ListNewsBelarus = (ListView) rootView.findViewById(R.id.listViewId);
return rootView;
}