Java 如何在片段中访问ListView
这是我的密码Java 如何在片段中访问ListView,java,android,android-fragments,Java,Android,Android Fragments,这是我的密码 public class OrderAllFragment extends ListFragment { private ArrayList<Order> orders1; private ArrayList<String> orders; private ListView orderListView; public OrderAllFragment() { orders1 = new ArrayList&l
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();
}
}
这是一个XML文件
有人能帮我找出我做错了什么吗?删除
onCreate
方法,改用此方法(&p):
@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;
}
在这里:
导致问题的行,因为orderListView
为null
原因是在onCreateView
之前调用了onCreateView
方法,并且调用findViewById
从Fragment
访问视图布局将返回null
,因为视图尚未准备好访问
在当前代码中,使用getActivity()
调用findViewById
意味着从Fragment
containerActivity
访问View
,而不是Fragment
布局,因为getActivity()
方法返回活动的上下文,而不是从片段访问视图所需的片段
使用onViewCreated
或onCreateView
从片段布局访问视图。例如:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
orderListView = (ListView) view.findViewById(R.id.listViewOrder);
orderListView.setAdapter(adapter);
}
谢谢你的详细解释。更改后,您建议它现在工作。但是现在onListItemClick不起作用。我是否也需要对此进行任何更改?@DeveshAgrawal:是的,右侧还需要使用orderListView.setonimclicklinklistener将click listener添加到orderListView
ListView(此)代码>
<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>
@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;
}
orderListView.setAdapter(adapter);
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
orderListView = (ListView) view.findViewById(R.id.listViewOrder);
orderListView.setAdapter(adapter);
}