2012-11-30 64 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()。

相關問題