我寫了一個小應用程序,它帶有一個自定義適配器的ListView
。每一行都包含一些Button
S,當點擊這將改變背景顏色,和我的列表項目可以點擊,以及通過將無法從數據庫中獲取列表項重新加載
android:descendantFocusability="blocksDescendants"
列表中的項目的XML。但現在我有這個奇怪的錯誤,點擊列表項將所有點擊的Button
恢復到它們原來的無色狀態。我怎樣才能讓Button
保持顏色?
詳細信息:定製適配器
部分:
View.OnClickListener onButtonClicked = new View.OnClickListener() {
@Override
public void onClick(View button) {
View listItem = (View) button.getParent();
final long DBid = (long) listItem.getTag();//database ID
final Button b = (Button) button;
sqldataDataSource datasource = new sqldataDataSource(context);
datasource.open();
datasource.updateButton(DBid);
datasource.close();
b.setBackgroundColor(0xFF386F00);
}
};
正如你所看到的,我改變背景顏色和更改數據庫條目,所以當整個列表被重新加載時,Button
保持它的顏色(我的自定義適配器的另一部分):
public View getView(int i, View convertView, ViewGroup parent) {
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.hrlistitems, parent, false);
Button b = (Button) rowView.findViewById(R.id.HRlistB);
b.setOnClickListener(onButtonClicked);
if(!(values.get(i).getB().equals(""))){
b.setBackgroundColor(0xFF386F00);
}
return rowView;
}
這個工作正常,當去其他活動,並回到這一個。按鈕按預期着色。
所以我的猜測是,名單是從被點擊的項目時,原有的listItem陣列,這就是爲什麼我試圖通過重裝我的數據庫,像這樣(從我的活動)來解決這個重建:
@Override
protected void onStart() {
super.onStart();
datasource = new sqldataDataSource(this);
datasource.open();
listItems = datasource.getOnlyRoutes(id);//this works fine
Collections.sort(listItems, HallenRoute.vergleichen());
if (mListView == null) {
mListView = (ListView) findViewById(R.id.listViewHalle);
}
adapter=new customAdapter(this, listItems);
setListAdapter(adapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int pos, long nid) {
listItems.get(pos).increaseCount();
datasource.updateCountHR(listItems.get(pos));
listItems = datasource.getOnlyRoutes(id);//fix I tried, doesn't work
Collections.sort(listItems, HallenRoute.vergleichen());
adapter.notifyDataSetChanged();
}
});
}
但這不起作用。
我怎樣才能讓ListView
無法在ItemClick
上重新加載或正確重新加載(即從數據庫中)?
This Works!它還提高了可維護性,因爲我現在擁有所有顏色。 ......但我不太瞭解PS,我應該在哪裏放置ID? – fifaltra
您的*值*是什麼(項目類)的列表? – Rami
啊,好的,當然這個item類存儲'DBid',但是我可以通過'onClick'方法訪問它,我把它放到標籤中。現在我想到了,把'i'放在那裏更有意義,這樣我就可以使用'values.get(i).getId()'來訪問它。我已經將標籤更改爲'long []'來傳遞'DBid' *和*'i',這當然毫無意義:D感謝您指引我朝着正確的方向發展! – fifaltra