Java android listview null正在尝试设置适配器()
我试图在我的Java android listview null正在尝试设置适配器(),java,android,listview,Java,Android,Listview,我试图在我的片段中实现一个列表视图,不管我怎么做,我都会得到一个NullPointerException。我检查对象是否为null并记录它们是否为null,然后显示ListView为null,但ListItemAdapter似乎未初始化 ListItemAdapter listAdapter = new ListItemAdapter(getContext(), R.layout.list_item_fragment, walks); if(listAdapter == null)
片段中实现一个列表视图
,不管我怎么做,我都会得到一个NullPointerException
。我检查对象是否为null并记录它们是否为null,然后显示ListView
为null,但ListItemAdapter
似乎未初始化
ListItemAdapter listAdapter = new ListItemAdapter(getContext(), R.layout.list_item_fragment, walks);
if(listAdapter == null)
Log.d("ListAdapter: ", "Null!!!");
else
Log.d("ListAdapter: ", "Not Null!!!");
ListView listView = (ListView) getActivity().findViewById(R.id.list_view);
if(listView == null)
Log.d("ListView: ", "Null!!!");
else
Log.d("ListView: ", "Not Null!!!");
listView.setAdapter(listAdapter);
编辑:这是整个片段
package com.janedoe.anothertabexample.fragments;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.janedoe.anothertabexample.R;
import com.janedoe.anothertabexample.models.WalkModel;
import java.util.ArrayList;
import com.janedoe.anothertabexample.Adapters.*;
public class TabFragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ArrayList<WalkModel> walks = new ArrayList<>();
WalkModel walk1 = new WalkModel();
walk1.setDescription("Walked around the block.");
walk1.setElapsed_time(SystemClock.uptimeMillis() - 99999999);
WalkModel walk2 = new WalkModel();
walk2.setDescription("Walked to store.");
walk2.setElapsed_time(SystemClock.uptimeMillis() - 98999000);
WalkModel walk3 = new WalkModel();
walk3.setDescription("Ran a million miles.");
walk3.setElapsed_time(SystemClock.uptimeMillis() - 97999999);
WalkModel walk4 = new WalkModel();
walk4.setDescription("Biked");
walk4.setElapsed_time(SystemClock.uptimeMillis() - 96999999);
walks.add(walk1);
walks.add(walk2);
walks.add(walk3);
walks.add(walk4);
ListItemAdapter listAdapter = new ListItemAdapter(getContext(), R.layout.list_item_fragment, walks);
if(listAdapter == null)
Log.d("ListAdapter: ", "Null!!!");
else
Log.d("ListAdapter: ", "Not Null!!!");
ListView listView = (ListView) getView().findViewById(R.id.list_view);
if(listView == null)
Log.d("ListView: ", "Null!!!");
else
Log.d("ListView: ", "Not Null!!!");
listView.setAdapter(listAdapter);
return inflater.inflate(R.layout.tab_fragment_1, container, false);
}
}
下面是xml的片段
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#d3d3d3">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textAlignment="center"></ListView>
</RelativeLayout>
我甚至看不到你的片段在哪里。必须先调用片段上的方法
活动中没有ListView,因为它位于片段中。通过这样做:
ListView listView = (ListView) getActivity().findViewById(R.id.list_view);
你正在发现一些不存在的东西。相反,由于它位于片段中,请执行以下操作:
ListView listView = (ListView) findViewById(R.id.list_view);
现在,列表视图将实际存在。使用:
ListView ListView=(ListView)rootView.findViewById(R.id.list\u视图)代码>
这将解决您的问题。在onCreateView()
的末尾,您正在膨胀的视图层次结构中有列表视图
getView()
返回onCreateView()返回的内容,但尚未返回任何内容。此外,层次结构尚未附加到任何活动,因此使用getActivity().findViewById()
的原始代码也存在相同的问题
因此,应提前膨胀视图层次结构并将其存储在变量中:
View root = inflater.inflate(R.layout.tab_fragment_1, container, false);
然后使用此选项访问其子视图:
ListView listView = (ListView) root.findViewById(R.id.list_view);
最后返回整个层次结构:
return root;
您应该在Fragment.onViewCreated回调方法中获得ListView的引用,该方法的第一个参数是该片段的根视图,因此只需调用第一个参数对象的view.findViewById方法您的logcat在哪里?此ListView是片段或活动的一部分吗?在活动的XML中是否有id为list\u view
的ListView?该代码在片段中的何处?如果ListView位于fragment
中,则无需使用getActivity()
只需在调用onViewCreated
后使用getView方法,检查@laalto,这可能已解决当前问题。我知道片段中没有findViewById()
@laalto,但我们不需要getActivity
我用上下文更新了我的问题。另外,我不能在我的片段中调用findViewById()
,它无法解析该方法…太棒了,这非常有效。万分感谢,我对安卓系统还是很陌生,甚至都不知道该找什么。在我读了你的帖子和我的方法之后,它点击了那里发生的事情。我没有意识到它需要片段布局,但我想这就是ListView所在的位置,所以它是有意义的!我正在开发的应用程序只是将各种教程的部分内容拼凑在一起,并对其进行零碎修改,使其更适合我自己的结果……哈哈,再次感谢我在那里遇到的一些挫折
ListView listView = (ListView) root.findViewById(R.id.list_view);
return root;