0

みなさん、こんにちは:)問題があります。

チェックボックスを使用してカスタムリストビューを作成しました。リストビューをクリックするとチェックボックスがオンになり、これを実行したのは誰ですか。

prodottiList = new ArrayAdapter<String>(this, R.layout.prodotti_row, R.id.maggiore, prodottoArray) {


        public View getView(int position, View convertView, ViewGroup parent) {

            View adapterView = super.getView(position, convertView, parent);

            String item = prodottoArray.get(position);

            currentCheckBox = (CheckBox)adapterView.findViewById(R.id.checkBox);

            Cursor c2 = myDb.rawQuery("SELECT * FROM selezionati WHERE prodotto='"+item+"'", null);
            int selezionatoId = c2.getColumnIndex("prodotto");
            while(c2.moveToNext()){
                  String selezionato = c2.getString(selezionatoId);

                  currentCheckBox.setChecked(true);
            }
            c2.close();


            listView.setOnItemClickListener(new OnItemClickListener(){

                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long id) {

                    CheckBox currentCheckBoxSel = (CheckBox)arg1.findViewById(R.id.checkBox);



                    String valore = prodottoArray.get((int) id);
                    myDb.execSQL("CREATE TABLE IF NOT EXISTS selezionati (id VARCHAR, prodotto VARCHAR, categoria VARCHAR, lista VARCHAR);");
                    Cursor c = myDb.rawQuery("SELECT * FROM selezionati WHERE prodotto='"+valore+"' AND lista='"+nomeListaApostrofo+"' ", null);

                    int conteggio = c.getCount();
                    if(conteggio == 0){
                        currentCheckBoxSel.setChecked(true);
                        myDb.execSQL("INSERT INTO selezionati VALUES ('"+id+"','"+ valore +"','"+ categoria +"','"+ nomeListaApostrofo +"');");

                    }else{
                        currentCheckBoxSel.setChecked(false);
                        myDb.execSQL("DELETE FROM selezionati WHERE prodotto='"+ valore +"' AND lista='"+nomeListaApostrofo+"' AND categoria='"+categoria+"'  ;");
                        myDb.execSQL("DELETE FROM table_"+nomeListaEdit+" WHERE prodotto='"+ valore +"' ;");
                        myDb.execSQL("DELETE FROM completati WHERE prodotto='"+ valore +"' AND lista='"+nomeListaApostrofo+"' ;");

                    }
                    c.close();
                }

            });             

            return adapterView;
        }

しかし、最初のチェックボックスをクリックすると、最初と最後のチェックボックスがオンになります。2番目をクリックすると、2番目と最後から2番目のターンがオンになりますか?。?なんで ?どうもありがとうございました、そして英語をごめんなさい

4

1 に答える 1

1

こんにちはスマイルこれは、カスタムリストビューを使用する場合の一般的な問題です。これは、リストビューが遅延し、他のビューを使用するために発生します。そのため、リストをスクロールしているときにチェックボックスがチェックされます。これに対する解決策は、ViewHolderを使用することです。リストビューの概念.UはviewHolderを検索するだけです概念uは、viewHolderを使用してリストビューを説明するサイトの数を取得します。

あなたの現在の解決策はこのリンクにあります:

AndroidでカスタムBaseAdapterを使用しているときに、チェックボックスの状態をリストビューに保存しますか?

それが役に立てば幸い..

于 2012-01-06T19:28:17.063 に答える