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

How can adapter send other parameters from array with objects to listview?

我必须承认适配器的理论对我来说并不完全清楚。在我的应用程序中,我创建了带有停车位编号的 ListView,并希望根据它们的可用性更改文本颜色。 ListView 项目从具有 "Dock" 对象的数组中获取数字,其中每个 DockPlace 都有 ID(数字)和 isAvailabile Status。我的适配器可以从 Dock 对象中获取数字并将其放入 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;
}

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

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

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() 删除对象。与您相关的那个:您可以使用 getItem().

在给定的 position 访问对象

由于 positiongetView() 方法中可用,这意味着您可以很容易地访问 "current" 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;
    }