Android中对象的自定义列表视图

android arrays listview object

35 观看

1回复

215 作者的声誉

我是Android编程的初学者,几乎不需要帮助。我有一个应在列表视图中显示的对象数组。这是一个类代码:

public class Car {
    public String img;
    public String thumbnail;
    public String manufacturer;
    public String model;
    public int price;
    public String description;
}

缩略图是一个字符串变量,其中包含要显示的缩略图的URL。我在DataStorage类中还声明了一些称为“ cars”的Car对象的数组。

我只希望在自定义列表视图中显示每个对象的两件事:缩略图(来自Internet)和模型。

我创建了布局item.xml,它应该代表listview的一项:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@android:color/holo_blue_dark">
    <ImageView
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:textColor="@android:color/white"
        android:text="left"
        android:id="@+id/image_tmb"
        android:layout_gravity="left|center_vertical"/>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_dark">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@android:color/white"
            android:paddingBottom="10dp"
            android:id="@+id/name"
            android:layout_weight="1"
            android:textSize="23dp"/>

    </LinearLayout>
</LinearLayout>

TextView应该用模型填充,而Imageview应该用缩略图填充。

我还创建了MyAdapter类,该类应填充listview:

public class MyAdapter extends BaseAdapter {
    private Context myContext;
    public MyAdapter(Context context) {
        this.myContext = context;
    }

    @Override
    public int getCount() {
        return DataStorage.cars.length;
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
      //Here I should customize my view but don't know how.

    }

我在activity_main.xml中创建了listview元素,并在MainActivity中对其进行了替换:

 ListView lv=(ListView) findViewById(R.id.lv);

那么,我将如何完成任务?

作者: Zvonimir Peran 的来源 发布者: 2016 年 1 月 4 日

回应 1


2

11129 作者的声誉

决定

一个简单的模式看起来像这样

@Override
public View getView(int i, View view, ViewGroup viewGroup) {

    // Inflate the view if it doesn't already exist
    if (view == null) {
        LayoutInflater.from(getContext()).inflate(R.layout.item, parent, false);
    }

    // Get your current Car object
    Car c = getItem(i);

    // Initialize the views
    ImageView image = (ImageView) view.findViewById(R.id.image_tmb);
    TextView name = (TextView) view.findViewById(R.id.name);

    // Fill the views according to the car's properties

    /* NOTE: I'm not going to go in depth to explain how to set 
    an ImageView image from a URL, as it is an entirely different question,
    so I'll put a link to this library below */

    Picasso.with(myContext).load(c.thumbnail).into(image);
    name.setText(c.model);
}

您需要修改getItem才能实际获得该物品,而不是返回null。

@Override
public Object getItem(int position) {
    return DataStorage.cars[position];
}

然后,在“活动” /“片段” /“任何”中设置适配器,就像这样

MyAdapter mAdapter = new MyAdapter(this);
lv.setAdapter(mAdapter);

如果您打算对图像做很多事情,并且不想编写自己的实现,那么Picasso是一个非常易于使用的库。

作者: Andrew Brooke 发布者: 2016 年 1 月 4 日
32x32