我必须承认适配器理论对我来说并不完全清楚。在我的应用程序中,我创建了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;
}
答案 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;
}