2013-06-05 18 views
5

Używam adapter = nowy SimpleCursorAdapter (this, android.R.layout.simple_list_item_multiple_choice, cur, cols, views), aby utworzyć formant wielokrotnego wyboru, , ale nie jestem zadowolony ze stylu widoku tekstowego w kontrolce wielokrotnego wyboru , więc muszę użyć następującego kodu, aby utworzyć nowy układ kontrolki wielokrotnego wyboru. Działa dobrze, ale nie sądzę, że to dobry sposób, czy jest jakiś dobry kod? Dzięki!Jak zastąpić styl android.R.layout.simple_list_item_multiple_choice?

adapter = nowy SimpleCursorAdapter (to, R.layout.mysimple_list_item_multiple_choice, cur, cols, widoki);

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

przeglądać "adaptery custome" w Androidzie – Pinki

Odpowiedz

0

Trzeba rozszerzyć BaseAdapter aby utworzyć niestandardowy Adapter.With niestandardowego adaptera każdym rzędzie listview wykorzystuje układ xml i stąd można utworzyć niestandardowy układ dla rzędów.

Przykład kodu z niestandardowego adaptera:

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; 
    } 

} 

Konfiguracja adaptera:

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

Linki przykładów:

example 1 example 2

R.layout.list_view_item jest zwyczaj xml fo r widok listy, w którym możesz dodać żądane widoki.

+0

Dzięki! ale twoja droga nadal wymaga napisania wielu kodów. :( –

+0

jeśli musisz zrobić coś, co nie jest dostarczane domyślnie, to nie ma innego wyboru. AFAIK może to być wykonane tylko przez niestandardowy adapter –

+0

Jest to tak złożony sposób na uzyskanie tak prostego zadania IMHO. –

3

Prosty.

Użyj <include>.

Utwórz nowy układ XML.

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

Można zastąpić wszystkie parametry układu (dowolny android:layout_* atrybuty) widoku głównego dołączonego layoutu, określając je w tagu.