0

我正在使用自定义 BaseAdapter 处理 ListView,我在此处的 Slidenerd 教程系列中观看过:(观看理解我的问题并不重要)
http://www.youtube.com/watch?v=_l9e2t4fcfM&list=PLonJJ3BVjZW6hYgvtkaWvwAVvOFB7fkLa&index =91

在虚拟设备上运行代码后没有错误,但 ListView 也没有。可以告诉我我的代码有什么问题吗?

public class List extends Activity {

    ListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        lv = (ListView) findViewById(R.id.listView);
        lv.setAdapter(new EhsanAdapter(this));

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.list, menu);
        return true;
    }

}

class SingleRow{
    String title;
    String description;
    int image;

    public SingleRow(String title,String description,int image) {
        this.title = title;
        this.description=description;
        this.image=image;
    }
}

class EhsanAdapter extends BaseAdapter{

    ArrayList<SingleRow> list;
    Context context;

    public EhsanAdapter(Context c) {
        list = new ArrayList<SingleRow>();
        context = c;
        Resources res = c.getResources();
        String[] titles = res.getStringArray(R.array.titles);
        String[] descriptions = res.getStringArray(R.array.descriptions);
        int[] images = {R.drawable.image1,R.drawable.image2,R.drawable.image3,R.drawable.image4,R.drawable.image5};
        for(int i=0;i<10;i++){
            list.add(new SingleRow(titles[i], descriptions[i], images[i]));
        }
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int i) {
        return list.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.single_row, viewGroup,false);
        TextView title = (TextView) row.findViewById(R.id.txtTitle);
        TextView description = (TextView) row.findViewById(R.id.txtDescription);
        ImageView image = (ImageView) row.findViewById(R.id.imgPic);
        SingleRow temp = list.get(i);
        title.setText(temp.title);
        description.setText(temp.description);
        image.setImageResource(temp.image);

        return row;
    }

}

活动布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".List" >

    <ListView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/listView"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

单行布局:

<?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" >

    <ImageView
        android:layout_margin="10dp"
        android:id="@+id/imgPic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/image1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Title"
        android:id="@+id/txtTitle"
        android:layout_alignTop="@+id/imgPic"
        android:layout_toRightOf="@+id/imgPic"
        android:layout_alignParentRight="true">
    </TextView>

    <TextView
        android:id="@+id/txtDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/imgPic"
        android:layout_marginLeft="25dp"
        android:layout_toRightOf="@+id/imgPic"
        android:layout_marginTop="20dp"
        android:text="Description"
        android:ems="10">
    </TextView>

</RelativeLayout>
4

3 回答 3

0

从 getView() 方法中删除该行LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);,而是将其添加到EhsanAdapter类的构造函数中。

于 2013-10-13T08:14:41.073 回答
0

你只有 5 张图片,你写了 i<10 你应该写 i<5 “标题”、“描述”和“图片”的数量必须相同。

    for(int i=0;i<5;i++){
        list.add(new SingleRow(titles[i], descriptions[i], images[i]));
    }
于 2013-11-18T12:23:19.493 回答
0

我看到不同的问题:

单行布局包含一个相对布局, android:layout_height="match_parent"应该是android:layout_height="wrap_content"

然后在适配器内部,您既不回收视图也不使用 ViewHolder 模式:http: //developer.android.com/training/improving-layouts/smooth-scrolling.html

关于ListView中ViewHolder模式的实现优化

http://www.jmanzano.es/blog/?p=166

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
    if (view == null){ //The row view is not created, let's do it:
        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View row = inflater.inflate(R.layout.single_row, viewGroup,false);
        TextView title = (TextView) row.findViewById(R.id.txtTitle);
        TextView description = (TextView) row.findViewById(R.id.txtDescription);
        ImageView image = (ImageView) row.findViewById(R.id.imgPic);
        // Here we add the title, description and image inside the ViewHolder
        ....
    }else{
        //With the View holder pattern we get the views inside the row view to fill it later
        ....
    }
    // Now we get the SingleRow and we fill it using the ViewHolder pattern
    SingleRow temp = list.get(i);
    ....

    return row;
}
于 2013-10-13T21:13:02.857 回答