Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义Listview中LayoutFlater中的空指针异常_Java_Android_Android Listview_Baseadapter - Fatal编程技术网

Java 自定义Listview中LayoutFlater中的空指针异常

Java 自定义Listview中LayoutFlater中的空指针异常,java,android,android-listview,baseadapter,Java,Android,Android Listview,Baseadapter,我是android的初学者。我得到了NullPointerReception错误 我希望我的活动得到我的listview和每个listview包含图像,它;它的标题和描述, 我读了这篇文章 我无法正确理解MainActivity.java LayoutInflater中的上下文发生了什么 我使用了基本适配器而不是ArrayAdapter 请帮忙。。提前谢谢 这里我放了一些代码 一个图像视图,两个文本视图 CustomeList.xml <?xml version="1.0" encodin

我是android的初学者。我得到了NullPointerReception错误

我希望我的活动得到我的listview和每个listview包含图像,它;它的标题和描述, 我读了这篇文章

我无法正确理解MainActivity.java LayoutInflater中的上下文发生了什么

我使用了基本适配器而不是ArrayAdapter

请帮忙。。提前谢谢

这里我放了一些代码

一个图像视图,两个文本视图 CustomeList.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imageView1"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@+id/imageView1"
    android:text="Descript1" />

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:src="@drawable/img2" />

<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:text="Title1"
    android:textAppearance="?android:attr/textAppearanceMedium" />

 </RelativeLayout>

上下文变量被引用为null

在构造函数中,您没有使用参数Context c

添加这行代码

context=c;
您正在使用
getView()
方法中的上下文,该方法也会导致空指针

在自定义适配器中,
getView()
返回触发空指针异常的
null
。您需要返回膨胀的
视图

替换

return null;


您没有正确使用“上下文”值。这就是你得到的错误。同时返回视图。 下面的代码将帮助您。您还可以使用ViewHolder模式,这将提高代码效率

公共类MyBaseAdapter扩展了BaseAdapter{

ArrayList<ListData> myList = new ArrayList<ListData>();
LayoutInflater inflater;
Context context;


public MyBaseAdapter(Context context, ArrayList<ListData> myList) {
    this.myList = myList;
    this.context = context;
    inflater = LayoutInflater.from(this.context);
}

@Override
public int getCount() {
    return myList.size();
}

@Override
public ListData getItem(int position) {
    return myList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MyViewHolder mViewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.layout_list_item, parent, false);
        mViewHolder = new MyViewHolder(convertView);
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (MyViewHolder) convertView.getTag();
    }

    ListData currentListData = getItem(position);

    mViewHolder.tvTitle.setText(currentListData.getTitle());
    mViewHolder.tvDesc.setText(currentListData.getDescription());
    mViewHolder.ivIcon.setImageResource(currentListData.getImgResId());

    return convertView;
}

private class MyViewHolder {
    TextView tvTitle, tvDesc;
    ImageView ivIcon;

    public MyViewHolder(View item) {
        tvTitle = (TextView) item.findViewById(R.id.tvTitle);
        tvDesc = (TextView) item.findViewById(R.id.tvDesc);
        ivIcon = (ImageView) item.findViewById(R.id.ivIcon);
    }
}
ArrayList myList=new ArrayList();
充气机;
语境;
公共MyBaseAdapter(上下文,ArrayList myList){
this.myList=myList;
this.context=上下文;
充气器=从(此上下文)开始的充气器;
}
@凌驾
public int getCount(){
返回myList.size();
}
@凌驾
public ListData getItem(int位置){
返回myList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
MyViewHolder mViewHolder;
if(convertView==null){
convertView=充气机。充气(R.layout.layout\u list\u项,父项,false);
mViewHolder=新的MyViewHolder(convertView);
setTag(mViewHolder);
}否则{
mViewHolder=(MyViewHolder)convertView.getTag();
}
ListData currentListData=getItem(位置);
mViewHolder.tvTitle.setText(currentListData.getTitle());
mviewolder.tvDesc.setText(currentListData.getDescription());
mViewHolder.ivIcon.setImageResource(currentListData.getImgResId());
返回视图;
}
私有类MyViewHolder{
文本视图tvTitle,tvDesc;
ImageView-ivIcon;
公共MyViewHolder(视图项){
tvTitle=(TextView)item.findViewById(R.id.tvTitle);
tvDesc=(TextView)item.findViewById(R.id.tvDesc);
ivIcon=(ImageView)item.findViewById(R.id.ivIcon);
}
}

您还可以建议他改进hit-getView方法,应用ViewHolder模式,避免每次调用getView时膨胀一个新视图,yes@blackbelt,并避免调用indViewById()在您的构造函数上,您没有将上下文设置为c。我认为您错过了此部分context=c;请检查您的变量。上下文变量导致空指针,因为您正在getView()中使用它methodoops,我忘了..谢谢,错误消失..谢谢用户3818605,,我将编辑我的答案,这样你就可以接受它,因为它解决了你的问题。你在
活动
java文件中定义了所有这些类吗?这是一个非常糟糕的主意。我发布了一个带有图像和文本的正确自定义
列表视图的示例实现,你可以看看这个开始吧,非常感谢Droidman。我对ArrayAdapter和BaseAdapter有一个困惑。你能给我一个合适的文档或链接吗?我看到了很多东西,但我感到困惑…哪一个更好?它们有不同的用途。简单地说:
BaseAdapter
是一个可以使用的工具,如果你有更复杂的自定义
ListView
GridView
context=c;
return null;
return row;
ArrayList<ListData> myList = new ArrayList<ListData>();
LayoutInflater inflater;
Context context;


public MyBaseAdapter(Context context, ArrayList<ListData> myList) {
    this.myList = myList;
    this.context = context;
    inflater = LayoutInflater.from(this.context);
}

@Override
public int getCount() {
    return myList.size();
}

@Override
public ListData getItem(int position) {
    return myList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    MyViewHolder mViewHolder;

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.layout_list_item, parent, false);
        mViewHolder = new MyViewHolder(convertView);
        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (MyViewHolder) convertView.getTag();
    }

    ListData currentListData = getItem(position);

    mViewHolder.tvTitle.setText(currentListData.getTitle());
    mViewHolder.tvDesc.setText(currentListData.getDescription());
    mViewHolder.ivIcon.setImageResource(currentListData.getImgResId());

    return convertView;
}

private class MyViewHolder {
    TextView tvTitle, tvDesc;
    ImageView ivIcon;

    public MyViewHolder(View item) {
        tvTitle = (TextView) item.findViewById(R.id.tvTitle);
        tvDesc = (TextView) item.findViewById(R.id.tvDesc);
        ivIcon = (ImageView) item.findViewById(R.id.ivIcon);
    }
}