Android – 自定义ArrayAdapter类中的notifyDataSetChange

我有一个名为InteractiveArrayAdapter的自定义ArrayAdapter,它将button和button侦听器添加到列表视图中的每个项目。 在适配器内部有一个getView方法来创build一个视图充气机。 这里面是我的button创build和buttonListener创build的地方。 当button被点击时,我删除与该button相关联的ArrayList中的元素。 问题是,我不知道如何从这个OnClick方法中调用notifyDataSetChange,或另一种方式来通知适配器,listView需要更新。

自定义适配器

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 } } 

Solutions Collecting From Web of "Android – 自定义ArrayAdapter类中的notifyDataSetChange"