这是我的代码
public class OrderAllFragment extends ListFragment {
private ArrayList<Order> orders1;
private ArrayList<String> orders;
private ListView orderListView;
public OrderAllFragment() {
orders1 = new ArrayList<>();
orders = new ArrayList<>();
for (int i=0; i<10; ++i){
Order o = new Order(i, 1+10);
orders1.add(o);
orders.add("dummy" + i);
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OrderAdapter adapter = new OrderAdapter (getActivity(), orders1);
orderListView = (ListView) getActivity().findViewById(R.id.listViewOrder);
orderListView.setAdapter(adapter);
//ListAdapter listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, orders);
//setListAdapter(listAdapter);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_all_order, container, false);
}
@Override
public void onListItemClick(ListView list, View v, int position, long id) {
Toast.makeText(getActivity(), getListView().getItemAtPosition(position).toString(), Toast.LENGTH_LONG).show();
}
}
它适用于字符串。就是这样。
//ListAdapter listAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, orders);
//setListAdapter(listAdapter);
但是这一行给出了空指针异常。
orderListView.setAdapter(adapter);
这是XML文件。
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="30dip"
android:layout_marginTop="50dp"
/>
<ListView
android:id="@+id/listViewOrder"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="30dip"
android:layout_marginTop="50dp"
/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="Design Games Screen"
android:textSize="20dp"
android:layout_centerInParent="true"/>
</RelativeLayout>
有人可以帮我解决我的错误吗?
答案 0 :(得分:1)
删除onCreate
方法&amp;请改用:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_all_order, container, false);
OrderAdapter adapter = new OrderAdapter (getActivity(), orders1);
orderListView = (ListView) v.findViewById(R.id.listViewOrder);
orderListView.setAdapter(adapter);
return v;
}
答案 1 :(得分:1)
下面:
orderListView.setAdapter(adapter);
由于orderListView
为null
而引发问题的行。
原因是在onCreate
之前调用onCreateView
方法,并且调用findViewById
来访问Fragment
布局中的视图将返回null
,因为视图尚未准备好访问。
在当前使用findViewById
调用getActivity()
的代码中,意味着从View
容器Fragment
而不是Activity
布局访问Fragment
,因为{{1}方法返回活动上下文而不是访问Fragment中的视图所需的getActivity()
。
使用Fragment
或onViewCreated
访问Fragment layout.like中的视图:
onCreateView