在列表视图中使用具有更多视图的数组适配器 [英] Use array adapter with more views in row in listview

查看:21
本文介绍了在列表视图中使用具有更多视图的数组适配器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我偶然发现了一个我无法理解的问题,所以我希望这里的某个人可能遇到过同样的问题或知道解决问题的好方法.

I have stumbled upon a problem I can't quite get my head around, so I was hoping perhaps someone here have had the same problem or knew a good way of solving the problem.

我创建了一个包含 ListView 的视图.这个 ListView 包含两个 TextView.问题是我不知道我将使用 ArrayAdapter 发送到第二个文本视图中的值发送到哪里.有没有办法向 ArrayAdapter 发送更多信息,以便我可以提供todaysmenu"TextView?

I have created a view containing a ListView. This ListView contains two TextView. The problem is that I don't know where I send the values which are meant to go in the second text view using the ArrayAdapter. Is there a way to send with more information to the ArrayAdapter so that I can feed the "todaysmenu" TextView?

ArrayAdapter 方法:

The ArrayAdapter method:

private void createList() {
    ListView lv = (ListView) findViewById(R.id.mylist);
    String[] values = new String[] { "Android", "Linux", "OSX", 
            "WebOS", "Windows7", "Ubuntu", "OS/2"
    };
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowlayout, R.id.restaurantname, values);
    lv.setAdapter(adapter);
}

行标记:

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

    <TextView
        android:id="@+id/restaurantname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@+id/restaurantname"
        android:textSize="23dp" >

    </TextView>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@+id/todaysmenu" />

</LinearLayout>

活动布局:

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

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


</LinearLayout>

一开始我一切正常,但是当我添加第二个文本字段时,问题就出现了.在此先感谢您的帮助!

At the beginning I got everything to work, but when I added the second textfield problems arouse. In advance, thank you for your help!

推荐答案

要实现这一点,您必须构建一个自定义适配器并扩充您的自定义行布局.使用 ArrayAdapter 将不起作用,因为

To achieve this you have to build a custom adapter and inflate your custom row layout. Using ArrayAdapter won't work because

默认这个类期望提供的资源id引用单个 TextView.如果要使用更复杂的布局,请使用也带有字段 id 的构造函数.该字段 id 应引用较大布局资源中的 TextView.

By default this class expects that the provided resource id references a single TextView. If you want to use a more complex layout, use the constructors that also takes a field id. That field id should reference a TextView in the larger layout resource.

因此,您的自定义适配器类可能类似于:

So, your custom adapter class could be somthing like:

public class CustomAdapter extends ArrayAdapter {
    private final Activity activity;
    private final List list;

    public CustomAdapter(Activity activity, ArrayList<Restaurants> list) {
        this.activity = activity;
        this.list = list;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView = convertView;
        ViewHolder view;

        if(rowView == null)
        {
            // Get a new instance of the row layout view
            LayoutInflater inflater = activity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.rowlayout, null);

            // Hold the view objects in an object, that way the don't need to be "re-  finded"
            view = new ViewHolder();
            view.retaurant_name= (TextView) rowView.findViewById(R.id.restaurantname);
            view.restaurant_address= (TextView) rowView.findViewById(R.id.textView1);

            rowView.setTag(view);
        } else {
            view = (ViewHolder) rowView.getTag();
        }

        /** Set data to your Views. */
        Restaurants item = list.get(position);
        view.retaurant_name.setText(item.getTickerSymbol());
        view.restaurant_address.setText(item.getQuote().toString());

        return rowView;
    }

    protected static class ViewHolder{
        protected TextView retaurant_name;
        protected TextView restaurant_address;
    }
}

您的 Restaurant.java 类可以像我在下面描述的那样简单:

And your Restaurant.java class could as simple as I describe below:

public class Restaurants {
    private String name;
    private String address;

    public Restaurants(String name, String address) {
        this.name = name;
        this.address = address;
    }
    public void setName(String name) {
        this.name= name;
    }
    public String getName() {
        return name;
    }
    public void setAddress(String address) {
        this.address= address;
    }
    public String getAddress() {
        return address;
    }
}

现在,在您的主要活动中,只需将您的列表与一些数据绑定,例如;

Now, in you main activity just bind you list with some data, like;

/** Declare and initialize list of Restaurants. */
ArrayList<Restaurants> list = new ArrayList<Restaurants>();

/** Add some restaurants to the list. */
list.add(new Restaurant("name1", "address1"));
list.add(new Restaurant("name2", "address2"));
list.add(new Restaurant("name3", "address3"));
list.add(new Restaurant("name4", "address4"));
list.add(new Restaurant("name5", "address5"));
list.add(new Restaurant("name6", "address6"));

此时您可以将自定义适配器设置到您的列表中

At this point you're able to set the custom adapter to your list

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

CustomAdapter adapter = new CustomAdapter(YourMainActivityName.this, list);
lv.setAdapter(adapter);

这就是全部,它应该可以很好地工作,但我强烈建议您谷歌搜索一些更好的替代方案来实现其他适配器.

This is all and it should work nicelly, but I strongly recommend you to google for some better alternatives to implement others Adapters.

这篇关于在列表视图中使用具有更多视图的数组适配器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆