這裏有一個我最近遇到的問題: 我有一個自定義的適配器類的列表視圖,適配器接受一個列表視圖並填充列表視圖中的元素。現在,我想在列表視圖的每一行上都有一個按鈕,以從中刪除項目。我應該如何處理這個問題?有沒有辦法遠程觸發活動類中的方法,並調用適配器上的notifydatachanged()方法來刷新列表視圖?ListAdapter修改數據源(這是一個arraylist)
2
A
回答
1
我做了這樣的事情:
public class MyAdapter extends Adapter {
private final ArrayList<String> items = new ArrayList<String>();
// ...
deleteRow(int position) {
items.remove(position);
notifyDataSetChanged();
}
//
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
Tag tag = new Tag();
// inflate as usual, store references to widgets in the tag
tag.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
deleteRow(position);
}
});
}
// don't forget to set the actual position for each row
Tag tag = (Tag)convertView.getTag();
// ...
tag.position = position;
// ...
}
class Tag {
int position;
TextView text1;
// ...
Button button;
}
}
0
在getView()方法中,你不能只在按鈕上設置OnClickListener()嗎?
事情是這樣的:
static final class MyAdapter extends BaseAdapter {
/** override other methods here */
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// inflate the view for row from xml file
// keep a reference to each widget on the row.
// here I only care about the button
holder = new ViewHolder();
holder.mButton = (Button)convertView.findViewById(R.id.button);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
// redefine the action for the button corresponding to the row
holder.mButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// do something depending on position
performSomeAction(position);
// mark data as changed
MyAdapter.this.notifyDatasetChanged();
}
}
}
static final class ViewHolder {
// references to widgets
Button mButton;
}
}
如果你不確定延伸BaseAdapter,檢查出例如List14在ApiDemos。這些技術爲您提供了一種靈活的方式來修改適配器的任何方面,儘管這是非常有用的。
+0
嗨, 感謝您的幫助,這是相當多,我在這裏做什麼。 我有一個活動類,有一個數組和一個列表視圖,我有一個適配器類,我通過列表視圖和數組。現在在一個列表視圖中的一行包含一個按鈕(每行),當這個按鈕被點擊時,我需要觸發一個方法,而不是適配器類,但包含活動的類。你明白嗎? 謝謝 彼得 – dusker 2010-04-29 17:34:50
相關問題
- 1. 修改數組到一個ArrayList
- 2. 如何迭代和修改這個Arraylist?
- 3. typeahead.js:更改數據源,這是作爲一個輔助
- 4. 將一個ArrayList轉換爲一個不可修改的ArrayList
- 5. 排序使用數據表一個gridview,和數據源是一個ArrayList
- 6. SimpleCursorAdapter/ListAdapter與多個來源
- 7. ArrayList是一個數據結構嗎?
- 8. 如何修改一個Java程序從數組到ArrayList對象?
- 9. 爲什麼Python在這個函數中修改源代碼?
- 10. Kendo UI遠程數據源修改
- 11. SSIS上游數據源修改
- 12. 修改ng-repeat的源數據
- 13. 使用lambda修改當前數據源
- 14. Listadapter和數據庫
- 15. 修改Arraylist的元素並將其添加到ArrayList的另一個ArrayList中
- 16. Android:將數據綁定到ListView而無需爲ListAdapter準備ArrayList?
- 17. ListAdapter從一個HashMap
- 18. 修改數據
- 19. 在ArrayList中修改對象
- 20. TreeSet vs Arraylist:修改元素
- 21. 的Java修改的ArrayList
- 22. 初始化和修改ArrayList
- 23. 修改arraylist通過textfields
- 24. 如何修改這一行?
- 25. 如何修改這個「make-matrix」函數?
- 26. 如何修改這個函數來添加一個eventListener?
- 27. 如何修改這個NSMutableArray?
- 28. 修改gradle這個BuildType
- 29. 如何修改這個jQuery?
- 30. 如何修改這個URL?
很酷,你如何將修改後的數據集傳遞給活動? – dusker 2010-04-29 19:20:39
你爲什麼要這樣? 'notifyDataSetChanged();'觸發ListView更新。 – yanchenko 2010-04-29 19:46:17
是的,但是有什麼辦法可以將它傳遞給Activity類?或者至少序列化它,以便其他類可以訪問它? – dusker 2010-04-29 20:29:01