适配器如何将带有对象的数组中的其他参数发送到listview?

时间:2017-09-05 13:05:45

标签: android listview adapter

我必须承认适配器理论对我来说并不完全清楚。在我的应用程序中,我创建了ListView与停车位数字,并希望根据其可用性更改文本的颜色。 ListView项目使用" Dock"从数组中获取数字。对象,每个DockPlace都有ID(编号)和isAvailabile状态。我的适配器可以从Dock Object获取数字并将其放在ListView中。它也可以改变文本颜色,但我不知道如何获得有关对象的其他参数。

适配器:

ListView docksList = (ListView) findViewById(R.id.docksList);
    ArrayAdapter<Dock> listAdapter = new ArrayAdapter<Dock>(
            this,
            android.R.layout.simple_list_item_1,
            Dock.docks //Dock - class name. docks - name of array with Dock Objects
    ) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            TextView text = (TextView) view.findViewById(android.R.id.text1);

            //in this place could be IF statement which check status of dock and can change text color depends on its

            text.setTextColor(Color.BLUE);

            return view;
        }
    };

码头:

public static final Dock[] docks = {
    new Dock(1, true),
    new Dock(2, true),
    new Dock(3, false),
};
private Dock(int number, boolean isAvailable) {
    this.number = number;
    this.isAvailable = isAvailable;
    }
public int getNumber() {
    return number;
}
public boolean getStatus() {
    return isAvailable;
}
public String toString() {
    String numberStr = "Dock no "+ String.valueOf(this.number);
    return numberStr;
}

2 个答案:

答案 0 :(得分:0)

您可以使用ArrayAdapter类的getItem(position)函数来获取特定位置的停靠对象的实例。

   public View getView(int position, View convertView, ViewGroup parent) {
       Dock dock=  getItem(position);   
       // do your stuff
   }

答案 1 :(得分:0)

ArrayAdapter只是ListAdapter接口的一个具体实现;还有BaseAdapter以及你想要自己实现的任何内容。

ArrayAdapter能够很好地隐藏它所做的所有艰苦工作,但在这种情况下,隐藏在你身上的一些东西正是你所需要的。

使用以下代码构建适配器时:

ArrayAdapter<Dock> listAdapter = new ArrayAdapter<Dock>(
        this,
        android.R.layout.simple_list_item_1,
        Dock.docks //Dock - class name. docks - name of array with Dock Objects
)

要理解的重要一点是,您的适配器将保留Dock.docks作为其自己的私有字段(名为mObjects),并且您可以通过自己的代码访问此字段的方法

您可以使用add()addAll()insert()等向适配器添加值。您可以使用remove()clear()删除对象。与您相关的那个:您可以使用position在给定的getItem()访问该对象。

由于position方法中getView()可用,这意味着您可以非常轻松地访问“当前”Dock对象。也许你可以使用这段代码:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        TextView text = (TextView) view.findViewById(android.R.id.text1);

        if (getItem(position).getStatus()) {
            text.setTextColor(Color.BLUE);
        }
        else {
            text.setTextColor(Color.BLACK);
        }

        return view;
    }