Announcement

Collapse
No announcement yet.

ListView - CheckBox Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ListView - CheckBox Problem

    Hallo
    ich fülle mit einem SimpleCursorAdapter über ein SearchView ein ListView
    Code:
    fts_my_adapter = new FTS_Adapter(getActivity(), R.layout.fts_card, crs, from, to);  
    searchLv.setAdapter(fts_my_adapter);
    Der Adapter, mit dem ich nur die Checkbox einbinde, ist:

    Code:
    public class FTS_Adapter extends SimpleCursorAdapter {
        Context context;
        ViewHolder vh;
        String rowID;
    
        public FTS_Adapter(Context context, int layout, Cursor cursor,
                           String[] from, int[] to) {
            super(context, layout, cursor, from, to);
            this.context = context;
        }
    
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            return LayoutInflater.from(context).inflate(R.layout.fts_card, parent, false);
        }
    
        @Override
        public void bindView(final View view, Context context, final Cursor cursor) {
            super.bindView(view, context, cursor);
    
            vh = (ViewHolder) view.getTag();
            if (vh == null) {
                vh = new ViewHolder();
    
                vh.fts_Wichtig = (CheckBox) view.findViewById(R.id.fts_chBoxWichtig);
                vh.id = cursor.getString(cursor.getColumnIndexOrThrow("_id"));
                rowID = vh.id;
    
                view.setTag(R.id.fts_chBoxWichtig, vh.fts_Wichtig);
            }
    
            vh.fts_Wichtig.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    CheckBox cb = (CheckBox) view.getTag(R.id.fts_chBoxWichtig);
                    if (cb.isChecked()) {
                        vh.fts_Wichtig.setChecked(true);
                        Toast.makeText(view.getContext(), rowID, Toast.LENGTH_SHORT).show();
                    } else {
                        vh.fts_Wichtig.setChecked(false);
                    }
                }
            });
        }
    
        static class ViewHolder {
            CheckBox fts_Wichtig;
    
            String id;
            String wichtig;
        }
    }
    In der xml-Datei fts_card befinden sich neben verschiedenen TextViews auch
    die Checkbox
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/relRL"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <android.support.v7.widget.CardView
            android:id="@+id/cardView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <RelativeLayout
                android:id="@+id/RL"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
    
                <TextView> tv1,tv2 usw. </TextView>
    
                <CheckBox
                    android:id="@+id/fts_chBoxWichtig"
                    android:layout_height="wrap_content" 
                    android:layout_width="wrap_content" />
    
            </RelativeLayout>
        </android.support.v7.widget.CardView>
    </RelativeLayout>

    Einlesen und Wiedergabe funktionieren einwandfrei, es wird auch nach setChecked der CheckBox die rowId
    zurückgegeben.

    Allerdings werden jeweils mehrere dcheckBoxen wie sich beim Scrollen zeigt, selektiert und nicht nzr
    die selektierte.

    Wie kann ixh das abstellen ? Wie binde ich die CheckBox in meinem Adapter richtig an ?
    Ich schlage mich jetzt schon längere Zeit damit herum, bin aber bisher auf keine Lösing gekommen.
    Deswegen frage ich.

    VG


Working...
X