我在片段中有一个列表视图。我试图在列表视图被夸大和引用后填充它。
我的第一次尝试是在片段的onCreate
方法中引用listview,但onCreateView
方法尚未对其进行膨胀,因此无法进行引用,并且列表保持无效。
然后我试图像某些人建议的那样引用onCreateView
方法中的列表。然而,这似乎在 onCreate
方法之后被称为。因此,我无法在onCreate
方法中进行任何初始化,onCreateView
似乎是放置初始化代码的不好的地方(例如设置列表适配器)。在片段中膨胀和引用listview的正确方法是什么,然后立即开始在代码中使用listview?
public class FragmentList extends Fragment {
ListView list;
List<Item> itemList;
ListAdapter adapter;
Context context;
@Override
public void onCreate(Bundle savedInstanceState)
{
itemList = getItemList();
context = getCtxt();
adapter = new ListAdapter(itemList, context);
if (list != null && adapter != null)
list.setAdapter(adapter); // never reached, as list is always null here
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_list, container, false);
list = (ListView) v.findViewById(R.id.list);
return v;
}
}
答案 0 :(得分:1)
如果您的片段只包含ListView,则应扩展ListFragment并在onActivityCreated()中填充它。
答案 1 :(得分:1)
你误解了lifecycle of Fragment。 我建议你看看文档。
请注意,之前调用onCreate而不是onCreateView
不保留Context引用,因为片段可以分离,Context也不总是有效。
尝试这样的事情。
公共类FragmentList扩展了Fragment {
ListView list;
List<Item> itemList;
ListAdapter adapter;
Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_list, container, false);
list = (ListView) v.findViewById(R.id.list);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
itemList = getItemList();
adapter = new ListAdapter(itemList, getActivity());
list.setAdapter(adapter);
}
}