2013-06-05 5 views
5

Я использую адаптер = новый SimpleCursorAdapter (это, android.R.layout.simple_list_item_multiple_choice, cur, cols, views), чтобы создать элемент управления с множественным выбором, , но меня не устраивает стиль текстового представления в режиме множественного выбора , поэтому я должен использовать следующий код для создания нового макета элемента управления с несколькими вариантами выбора. Это хорошо работает, но я не думаю, что это хороший способ, есть ли хороший код? Благодаря!Как переопределить стиль android.R.layout.simple_list_item_multiple_choice?

адаптер = новый SimpleCursorAdapter (это, R.layout.mysimple_list_item_multiple_choice, cur, cols, views);

lv.setAdapter(adapter); 
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 

mysimple_list_item_multiple_choice.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:gravity="center_vertical" 
    android:checkMark="?android:attr/listChoiceIndicatorMultiple" 
    android:paddingLeft="6dip" 
    android:paddingRight="6dip" 
    android:ellipsize="end" 
    android:singleLine="true" 

/> 
+0

gothrough 'custome adapters' in android – Pinki

ответ

0

Вы должны расширить BaseAdapter создать пользовательский Adapter.With A пользовательского адаптера каждую строку из ListView использует макет XML и, следовательно, вы можете создать собственный макет для строк.

Пример кода пользовательского адаптера:

public class ImageAdapter extends BaseAdapter { 
    private Context context; 
    private final String[] StrValues; 

    public ImageAdapter(Context context, String[] StrValues) { 
     this.context = context; 
     this.StrValues = StrValues; 
    } 

    // getView that displays the data at the specified position in the data set. 
    public View getView(int position, View convertView, ViewGroup parent) { 
     // create a new LayoutInflater 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View view; 
     view = null; 
     convertView = null;// avoids recycling of list view 
     if (convertView == null) { 

      view = new View(context); 
      // inflating grid view item 
      view = inflater.inflate(R.layout.list_view_item, null); 

      // set value into textview 
      TextView textView = (TextView) view 
        .findViewById(R.id.list_item_label); 
      textView.setText(StrValues[position]); 

     } 

     return view; 
    } 

    // Total number of items contained within the adapter 
    @Override 
    public int getCount() { 
     return StrValues.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return 0; 
    } 

} 

Установка адаптера:

listView = (ListView) findViewById(R.id.listView1); 
    // setting adapter on listview 
    listView.setAdapter(new ImageAdapter(this, StrValues)); 

Ссылки примеров:

example 1 example 2

R.layout.list_view_item обычай XML для вашего списка, в котором вы можете добавить нужные виды.

+0

Спасибо! но ваш путь по-прежнему нужно написать много кода тоже. :( –

+0

, если вам нужно сделать что-то, что не предусмотрено по умолчанию, тогда другого выбора нет. АФАИК это можно сделать только с помощью настраиваемого адаптера. –

+0

Это такой сложный способ достижения такой простой задачи IMHO. –

3

Простой.

Использование <include>.

Создайте новый XML-макет.

 <include android:id=”@+android:id/simple_list_item_multiple_choice” 
    android:layout_width=”match_parent” 
    android:layout_height=”match_parent” 
    layout=”@layout/title”/> 

Вы можете изменить все параметры макета (любые android:layout_* атрибутов) корневого зрения прилагающегося компоновщика, указав их в теге.

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