2011-07-07 192 views
2

我有自定義list_row:刪除項目,在ListView的一個按鈕自定義ArrayAdapter

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="wrap_content" android:baselineAligned="false"> 
<Button android:layout_width="30dip" android:layout_marginTop="7dip" android:gravity="right" 
android:id="@+id/delete" android:layout_height="30dip" android:background="@drawable/delete" 
android:layout_gravity="top"></Button> 
<TextView android:textSize="20dip" 
android:text="TextView" android:id="@+id/tavsiye" android:layout_marginTop="10dip" 
android:layout_gravity="top" android:layout_width="wrap_content" 
android:layout_height="wrap_content"></TextView> 
</LinearLayout> 

我有這樣的一個ListView:

<ListView 
     android:id="@+id/tavsiyeler" 
     android:layout_height="300dip" 
     android:layout_width="170dip" 
     android:fastScrollEnabled="true" 
     android:scrollbars="vertical"/> 

和延伸ArrayAdapter自定義適配器:

public class HekimTavsiyeleriAdapter extends ArrayAdapter<String> { 


private Context context; 
private int resource; 
private ArrayList<String> tavsiyeler; 


public HekimTavsiyeleriAdapter(Context context, int resource, 
     ArrayList<String> objects) { 
    super(context, resource, objects); 
    this.context=context; 
    this.resource=resource; 
    this.tavsiyeler=objects; 
} 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(this.resource, null); 
    } 

    if (this.tavsiyeler.size()!=0) { 
      TextView tavsiye = (TextView) v.findViewById(R.id.tavsiye); 
      Button but= (Button) v.findViewById(R.id.delete); 

      if (tavsiye != null) { 
       String st=this.tavsiyeler.get(position); 
       tavsiye.setText(st);  
      } 
      if(but!=null){ 
       but.setId(position); 
       but.setOnClickListener(new AdapterView.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         int id=v.getId();  
         tavsiyeler.remove(id); 
         notifyDataSetChanged(); 

        }       
        }); 

      } 

    } 
    return v; 
} 

我正在創建適配器並填寫如下列表:

eklenecekTavsiyeler=new ArrayList<String>(); 
    adapter= new HekimTavsiyeleriAdapter(context, 
      R.layout.hekim_tavsiyeleri_row, eklenecekTavsiyeler); 

    ListView tavsiyelerListesi = (ListView)findViewById(R.id.tavsiyeler); 
    tavsiyelerListesi.setAdapter(adapter); 

,並增加新的項目,如認爲:

this.adapter.add(<some-string>); 
    this.adapter.notifyDataSetChanged(); 

和我的列表視圖見過這樣的:

http://imageshack.us/photo/my-images/97/listir.jpg/

這裏是我的問題:

我加入新項目列表。我有固定的清單高度。當我填充列表直到所有高度被佔用時,然後向列表添加一個新項目,這需要滾動,因爲列表高度溢出。我添加的最後一個項目是錯誤的ID,當我按下十字按鈕時,它會刪除錯誤的項目。但是,當列表沒有溢出時,一切正常。溢出後,按鈕的ID設置錯誤(似乎是隨機)。順便說一句,爲了設置按鈕的ID,我使用getView的位置參數。

在此先感謝。

回答

2

恐怕你的代碼有缺陷。 你必須停止呼叫but.setId()。有了這個,你可以覆蓋視圖的內部編號,即R.id.delete的值。可能你打算使用but.setTag()/but.getTag()

+0

謝謝。這是答案。 – aod

相關問題