我試圖創建一個可以綁定到從數據庫對象的列表,有id
和name
性質的通用微調適配器,這樣我就可以1)獲得與所選擇的價值id
在微調中;和2)設置基於所述對象id
,而不是位置上所選擇的項目,如IDS將不匹配在微調的位置:的Android定製微調適配器綁定
id name
-- -----
1 Alice
3 Bob
爲定製適配器以下代碼中發現here是一個好的開始,並是通用的:
import java.util.List;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
public class SpinAdapter<T> extends ArrayAdapter<T> {
private Context context;
private List<T> values;
public SpinAdapter(Context context, int textViewResourceId, List<T> values) {
super(context, textViewResourceId, values);
this.context = context;
this.values = values;
}
public int getCount() {
return values.size();
}
public T getItem(int position) {
return values.get(position);
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView label = new TextView(context);
label.setTextColor(Color.BLACK);
label.setText(values.toArray(new Object[values.size()])[position]
.toString());
return label;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
TextView label = new TextView(context);
label.setTextColor(Color.BLACK);
label.setText(values.toArray(new Object[values.size()])[position]
.toString());
return label;
}
}
爲了設置所選的值,我需要適配器返回位置給出其ID的對象。我想添加一個方法,如public int getPosition (long id)
循環遍歷列表中的所有項目,並返回具有正確標識的項目的索引。
然而,作爲一個初學者,我不太放心使用泛型類型,抽象類和接口。我試圖通過一個抽象類DatabaseItem
取代通用<T>
如:
public abstract class DatabaseItem {
public abstract long getId();
public abstract String getName();
}
,使我的對象類擴展DatabaseItem
,但我不認爲這個工程。 任何幫助,將不勝感激。
一個主適配器來控制所有其他。傳奇的目標。我認爲迫使你所有的「適應性」模型「擴展」一類是危險的。您應該考慮將'DatabaseItem'轉換爲'interface'。 –
所有這一切,如果它可以工作。我只希望我知道如何調用我只在接口中定義的方法 - 比如getId() - 在(通用)適配器類中。 – phme