8
我有一個名爲InteractiveArrayAdapter的自定義ArrayAdapter,它將按鈕和按鈕偵聽器添加到列表視圖中的每個項目。在適配器內部有一個創建視圖充氣器的getView方法。這裏是我的按鈕被創建並且buttonListener被創建的地方。當按鈕被點擊時,我刪除與該按鈕關聯的ArrayList中的元素。問題是,我不知道如何從這個OnClick方法中調用notifyDataSetChange,或者另一種方式來通知適配器listView需要更新。Android - 自定義ArrayAdapter類內的notifyDataSetChange
定義適配器:
public class InteractiveArrayAdapter extends ArrayAdapter<String> {
private final List<String> list;
private final Activity context;
private ListView listV;
public InteractiveArrayAdapter(Activity context, List<String> list) {
super(context, R.layout.rowbuttonlayout, list);
this.context = context;
this.list = list;
}
static class ViewHolder {
protected TextView text;
protected Button button;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.rowbuttonlayout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView) view.findViewById(R.id.label);
viewHolder.button = (Button) view.findViewById(R.id.add);
viewHolder.button
.setOnClickListener(new Button.OnClickListener() {
// @Override
// public void onButtonClicked(Button buttonView,
// boolean isChecked) {
// String element = (String) viewHolder.button
// .getTag();
// element.setSelected(buttonView.isChecked());
//
// }
public void onClick(View v) {
String tag = (String) viewHolder.button.getTag();
list.remove(list.indexOf(tag));
// TODO Auto-generated method stub
}
});
view.setTag(viewHolder);
viewHolder.button.setTag(list.get(position));
} else {
view = convertView;
((ViewHolder) view.getTag()).button.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position));
return view;
}
}
活動:
public class InventoryActivity extends Activity {
public Inventory appInv;
private ListView lv1 = null;
private ListView lv2 = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
appInv = new Inventory(prefs);
setContentView(R.layout.inventory);
// Get UI references.
//
lv1 = (ListView) findViewById (R.id.list1);
lv2 = (ListView) findViewById (R.id.list2);
ArrayAdapter<String> adapter1 = new InteractiveArrayAdapter (this, appInv.inventory);
ArrayAdapter<String> adapter2 = new InteractiveArrayAdapter (this, appInv.ingredients);
lv1.setAdapter(adapter1);
lv2.setAdapter(adapter2);
// TODO Auto-generated method stub
}
}
只需在'onClick'中調用'notifyDataSetChanged();'' –
感謝您的工作 – user1865047