适配器如何将带有对象的数组中的其他参数发送到列表视图?
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
访问对象
由于 position
在 getView()
方法中可用,这意味着您可以很容易地访问 "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;
}
我必须承认适配器的理论对我来说并不完全清楚。在我的应用程序中,我创建了带有停车位编号的 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
访问对象
由于 position
在 getView()
方法中可用,这意味着您可以很容易地访问 "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;
}