2014-01-21 2 views
0

У меня есть элемент списка с несколькими видами, текстовым представлением и кнопкой изображения, но структура 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 вы можете удалить данные из своего 'списка', используя' remove() 'функцию' ArrayList', а затем использовать 'notifyDataSetChanged();'. –

ответ

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.

Смежные вопросы