是的,總會有更好的方法。但是有沒有更好的方法可行? :)在Android事件處理程序中使用'this'。有沒有更好的辦法?
所以這段代碼的作品。它是一個ListActivty的自定義適配器,它的想法是每行都有一個按鈕,當點擊該按鈕時,該行的項目被刪除,列表刷新。
private class ThirdActivityAdapter extends ArrayAdapter<String> {
private Context ctx;
private List<String> items;
public ThirdActivityAdapter(Context ctx, List<String> items) {
super(ctx, R.layout.third_activity_list_row, items);
this.ctx = ctx;
this.items = items;
}
public List<String> getItems() {
return items;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View row = inflater.inflate(R.layout.third_activity_list_row, parent, false);
TextView txt = (TextView)row.findViewById(R.id.third_activity_list_row_text);
Button btn = (Button)row.findViewById(R.id.third_activity_list_row_btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View view = (View)v.getParent();
ListView listView = (ListView)view.getParent();
ThirdActivityAdapter.this.items.remove(listView.getPositionForView(view));
ThirdActivityAdapter.this.notifyDataSetChanged();
}
});
txt.setText(items.get(position));
return row;
}
在點擊監聽器,我使用ThirdActivityAdapter.this
獲得在適配器的項目。有一個更好的方法嗎?我可以看到外部源如何工作,但我想在繼續之前看看是否有更好的設計。
謝謝!
*「是的,總有一種更好的方法,但有沒有更好的方法可行?」*。如果有更好的辦法,但這是不可能的,那麼它不會是一個更好的方法。這將是...不是一種方式 – codeMagic 2015-03-02 16:37:44
您不需要在items.remove或notifyDataSetChanged中使用'ThirdActivityAdapter.this'。你也可以直接做。 – Apurva 2015-03-02 16:37:55
這是更好的方法。出於某種原因,我認爲「物品」不可訪問,因爲它不是最終的。 – 2015-03-02 16:55:50