2012-11-30 51 views
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 
    } 
} 
+2

只需在'onClick'中调用'notifyDataSetChanged();'' –

+0

感谢您的工作 – user1865047

回答

9
public void onClick(View v) { 
        String tag = (String) viewHolder.button.getTag(); 
        list.remove(list.indexOf(tag)); 
        notifyDataSetChanged() 
        // TODO Auto-generated method stub 

       } 

在乌尔onClickListener只需添加notifyDataSetChanged()。

相关问题