如何在Fragment中访问ListView

时间:2015-12-09 11:59:46

标签: 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<>();
        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>

有人可以帮我解决我的错误吗?

2 个答案:

答案 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);

由于orderListViewnull而引发问题的行。

原因是在onCreate之前调用onCreateView方法,并且调用findViewById来访问Fragment布局中的视图将返回null,因为视图尚未准备好访问。

在当前使用findViewById调用getActivity()的代码中,意味着从View容器Fragment而不是Activity布局访问Fragment,因为{{1}方法返回活动上下文而不是访问Fragment中的视图所需的getActivity()

使用FragmentonViewCreated访问Fragment layout.like中的视图:

onCreateView