适配器Android出错

时间:2014-04-04 13:49:41

标签: android adapter

这可能是简单的答案,但请看一下这个错误。我想让适配器返回一个View。我一直在寻找网络中的所有地方,但仍无法使其正常运行。请帮帮我。

这是我的代码:

MAIN ACTIVITY shortly:

public void setAdapter()
    {
        adapter = new ListAdapter(this, R.id.list_item, list);

    } 

AND ADAPTER:

public class ListAdapter extends ArrayAdapter<GifModel> {


    private ArrayList<GifModel> objects;
    private Context context;


    public ListAdapter(Context context, int textViewResourceId, ArrayList<GifModel> objects) {
        super(context, textViewResourceId, objects);
        this.objects = objects;
        this.context = context;
    }


    public View getView(int position, View convertView, ViewGroup parent){

        View v = convertView;


        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
             // HERE IS A CRITICAL ERROR. IT CAN NOT INFLATE THIS LAYOUT AND DO NOT KNOW WHY
            v = inflater.inflate(R.layout.newListItem, null);
        }


        GifModel i = objects.get(position);

        if (i != null) {


            TextView tt = (TextView) v.findViewById(R.id.nameOfTheItem);
            TextView ttd = (TextView) v.findViewById(R.id.dateOfAdded);


            if (tt != null){
                tt.setText(i.getNameOfIteme());
            }
            if (ttd != null){
                ttd.setText(i.getAddedDate());
            }

        }

        // the view must be returned to our activity
        return v;

    }

END LIST ITEM VIEW:

<?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="80dp"
    android:background="@android:color/darker_gray"
    android:id="@+id/newListItem" >

    <ImageView
        android:id="@+id/listImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="19dp"
        android:layout_marginTop="16dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/dateOfAdded"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/listImageView"
        android:layout_marginLeft="26dp"
        android:layout_toRightOf="@+id/listImageView"
        android:text="HAHA" />

    <TextView
        android:id="@+id/nameOfTheItem"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/dateOfAdded"
        android:layout_alignTop="@+id/listImageView"
        android:text="UMCUMC" />

    <ImageView
        android:id="@+id/ratingView"
        android:layout_width="50dp"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/nameOfTheItem"
        android:layout_marginRight="10dp"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>

5 个答案:

答案 0 :(得分:2)

你不能使用驼峰名称作为布局文件。唯一允许的字符为a-z,0-9,_

答案 1 :(得分:1)

在适配器的构造函数中声明和初始化LayoutInflater也是一个好主意,getView会在不可预测的时间被调用,并且每次都会为它声明对象会导致大量的内存开销。

我通常会设置我的适配器:

public MyAdapter extends BaseAdapter {

    private LayoutInflater layoutInflater;

    public MyAdapter(Context context) {
        layoutInflater = (LayoutInflater) context.getSystemsService(Context.LAYOUT_INFLATER_SERVICE);
    }

    // getId,etc...
}

答案 2 :(得分:0)

尝试替换

(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

((Activity) context).getLayoutInflater();

答案 3 :(得分:0)

您是否尝试过使用其他的inflater?

inflater.inflate(R.layout.newListItem, parent, false);

我有类似的问题,但这解决了它。

答案 4 :(得分:0)

在适配器内添加接口ViewHolder。你可以查看如何做到这一点。 关于你的错误,这应该有效:

View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.YourAdapterLayoutt, parent, false);