Android: счетчик в виде списка. Где находится событие OnClick / OnItemClick / OnItemSelected? - PullRequest
0 голосов
/ 29 января 2011

У меня есть N «книги», каждая с некоторым количеством глав. Поэтому я создаю ListView. Каждый элемент в ListView состоит из двух частей: TextView для имени и Spinner для перечисления глав.

Я создал специальный адаптер для ListView - BookAdapt и специальный адаптер для Spinner - ChapAdapt. У меня это отображается и работает, но я не могу узнать, как добавить событие click / selected.

Вот список ресурсов

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Load Chapter" />
<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <Button
        android:text="Load"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
     <Button
        android:text="Cancel"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>
</LinearLayout>

<ListView
    android:id="@+id/chapview" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>      

Вот дисплей каждой книги

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
    android:id="@+id/viewbook"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"/>
<Spinner
    android:id="@+id/chapspinner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/chapter_prompt" 
    android:layout_weight="1"/>

Вот ключевые детали из BookAdapt

class BookAdapt extends ArrayAdapter {
       BookAdapt( Context context, int txtres, BookHolder[] bks) {

     super( context, txtres );
       mContext = context;
       books = bks;
       mInflater = LayoutInflater.from(context);
      }

      public View getView( int pos, View convert, ViewGroup parent) {
       BookHolder book = books[ pos];
       String bkname = book.getName();
       if (convert == null) {
        convert = mInflater.inflate(R.layout.bookview, null);
        book.text = (TextView) convert.findViewById(R.id.viewbook);
        Spinner sp = (Spinner)convert.findViewById( R.id.chapspinner);
        ChapAdapt ch = new ChapAdapt( book, mContext);
              sp.setAdapter( ch);
        //convert.setClickable(true);
        convert.setTag( book);
       } else {
        book = (BookHolder)convert.getTag();
       }
       book.text.setText( bkname );
       return convert;  
      }

ChapAdapt просто назначьте TexTView.

1 Ответ

0 голосов
/ 29 января 2011

Spinner сам реализует OnClicklistener, так что он может всплыть и позволить вам выбрать соответствующий элемент.После выбора система должна вызывать Spinner.onClick(), поэтому я думаю, что это именно то место, которое вы ищете.

То, что вы пытаетесь сделать, звучит очень похоже на сценарий использования для ExpandableListView для меня- возможно, это тоже может быть интересно.

...