2015-04-21 35 views
0

我有一個ListView的項目。每個項目都包含一個TimeTextView(它只是一個顯示時間的簡單類,我想要的方式),另一個TextView和一個Button來從ListView中移除項目。對於我擴展的類ArrayAdapter和重寫方法getView()像這樣:在ArrayAdapter中使用remove()方法<Integer>

public class TimeListAdapter extends ArrayAdapter<Integer> { 

private Context applicationContext = null; 
private int layout = 0; 

private class ViewHolder { 
    public TimeTextView timeText; 
    public TextView position; 
    public ImageButton removeButton; 
} 

TimeListAdapter(Context context, int resource, ArrayList<Integer> objects) { 
    super(context, resource, objects); 
    applicationContext = context; 
    layout = resource; 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final Integer newTime = getItem(position); 
    ViewHolder holder = null; 
    LayoutInflater inflater = (LayoutInflater) applicationContext. 
      getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if (convertView == null) { 
     convertView = inflater.inflate(layout, null); 
     holder = new ViewHolder(); 
     holder.timeText = (TimeTextView) convertView.findViewById(R.id.time_text); 
     holder.position = (TextView) convertView.findViewById(R.id.position); 
     holder.removeButton = (ImageButton) convertView.findViewById(R.id.remove_button); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.timeText.setTime(newTime); 
    holder.position.setText((new Integer(position + 1)).toString() + "."); 
    holder.removeButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      remove(newTime); 
     } 
    }); 

    return convertView; 
} 
} 

現在我的問題是,如果你把兩個項目具有相同值,則remove()方法會自動刪除第一個,即使你點擊了第二個項目的按鈕。例如,如果您的列表中有值(12,16,12),並且您單擊按鈕以刪除第三項,則第一項將被刪除。

到目前爲止,我發現的唯一解決方案是使IntegerWrapper類只包含一個Integer作爲公共屬性。但是我發現在我的其他代碼中使用它非常不方便。

有沒有人有更優雅的解決方案?

回答

1

請執行下列操作

  • 註冊onItemClickListener你Activity類這會給你在方法的方法onItemClick請執行下列操作

     arrayAdapter.setOnItemClickListener(
         new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 
          objects.remove(position); 
         arrayAdapter.notifyDataSetChanged(); 
         } 
        }); 
    

這將刪除你想要的位置。

+0

好吧,但我只想當我點擊按鈕,而不是整個項目時,這種行爲......雖然這幫助了我很多。解決方案是將TimeListAdapter類作爲活動的內部類。而不是我寫的onClick方法的代碼,你只需把你的onItemClick的代碼。謝謝 :) – Kadoc

相關問題