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
container
Activity
访问
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);
  }