2014-01-21 105 views
0

我有一個列表項目有多個視圖,textview和imagebutton,但ArrayAdapter的結構只允許單個TextView,因此我無法查看和點擊的ImageButton刪除行項目,我的代碼如下:如何創建具有多個視圖的列表行項目

MainActivity.java

ArrayList<String> arrayvalues= new ArrayList<String>(); 
ArrayAdapter<String> adapter; 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lv=(ListView) findViewById(R.id.list); 


adapter = new ArrayAdapter<String>(this, 
       R.layout.list_item, R.id.tv_num, arrayvalues); 
lv.setAdapter(adapter); 

那麼這是我的列表行模板list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
    <LinearLayout 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:orientation="horizontal" 
    > 

<TextView 
    android:id="@+id/tv_num" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="left" 
    android:textAppearance="?android:attr/textAppearanceMedium" /> 
<ImageButton 
    android:id="@+id/btn_delete" 
    android:layout_width="wrap_content" 
    android:layout_height="50dip" 
    android:src="@drawable/ic_launcher"/> 

</LinearLayout> 

</LinearLayout> 

點擊該ImageButton的作爲是試圖下面

public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
    LayoutInflater mInflater = null; 
    final ImageButton btn_delete; 

     View vi=convertView; 
     if(convertView==null) 
     vi = mInflater.inflate(R.layout.list_item, null); 
     btn_delete=(ImageButton) findViewById(R.id.btn_delete); 
     btn_delete.setTag(position); 
     btn_delete.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 

       adapter.remove(adapter.getItem(position)); 
       adapter.notifyDataSetChanged(); 


     } 
    }); 


     return vi; 
    } 

我怎樣才能解決這個讓我能夠刪除的行項目,並更新一個ArrayAdapter應該刪除的行項目嗎? ps:慷慨提供代碼

+0

使用BaseAdapter代替ArrayAdapter。 – Kishan

+0

UMM可以使用'ArrayList'的remove()'函數從'list'中刪除數據,然後使用'notifyDataSetChanged();'。 – 2014-01-21 09:21:15

回答

1

您需要創建自己的自定義適配器

並在此自定義適配器(MySimpleArrayAdapter)中,膨脹您的自定義子佈局。請參閱下面的自定義適配器示例

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MySimpleArrayAdapter(Context context, String[] values) { 
    super(context, R.layout.list_item, values); 
    this.context = context; 
    this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View rowView = inflater.inflate(R.layout.list_item, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.label); 
    ImageButton imageBtn = (ImageButton) rowView.findViewById(R.id.btn_delete); 
    textView.setText(values[position]); 
    // TODO get the id of image button here and delete 


    return rowView; 
    } 

您可以在此tutorial中找到您的需求的工作示例。

相關問題