0

複数選択ダイアログが実行され、正しい値でポップアップ表示されます。ただし、保存ボタンがクリックされたときに値を設定および取得する方法を理解するのに苦労しています。

私のコードは次のとおりです。

   public void addCondition(View view){

        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
        Cursor f = db.rawQuery("select * from assetobservationtypes", null);  
        Log.e("Asset Helper Types:", "Cursor run");
         List<CharSequence> mHelperNames = new ArrayList<CharSequence>();
         final ArrayList<String> mHelperNamesID= new ArrayList<String>();  

        if(f.getCount() > 0) {
            f.moveToFirst();
               while(!f.isAfterLast()) {
                   mHelperNames.add(f.getString(f.getColumnIndex("Observation")));
                   mHelperNamesID.add(f.getString(f.getColumnIndex("AssetObsID")));

                    f.moveToNext();
               }
        }

        f.close();

        final List<Integer> mSelectedItems = new ArrayList<Integer>();

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("My Title")
                    .setMultiChoiceItems(mHelperNames.toArray(new CharSequence[mHelperNames.size()]), null,
                            new DialogInterface.OnMultiChoiceClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which, boolean isChecked) {
                                    if (isChecked) {

                                        mSelectedItems.add(which);
                                    } else if (mSelectedItems.contains(which)) {

                                        mSelectedItems.remove(Integer
                                                .valueOf(which));
                                    }
                                }
                            })

                   .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialog, int id) {                      
                           txtCondition.setText("set");
                           txtCondition.setTextColor(Color.parseColor("#4c9226"));
                           count++;
                       }
                   })
                   .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                       @Override
                       public void onClick(DialogInterface dialog, int id) {
                           dialog.dismiss();
                       }
                   });
            builder.show();
    }

リストが配列mSelectedItemsにあることは理解していますが、setPositiveButtonのonclickでmSelectedItems.get(0)のログを実行してテストしようとすると、アプリがクラッシュしたばかりのものが保持されていました。

これらの値を取得/保存するにはどうすればよいですか?そして、次回リストに事前入力します

トム

4

1 に答える 1

0

AlertDialog次回、ダイアログが再び表示されたときにチェックされた項目を表示したいときに、リストを事前に入力することによって推測します。この場合mSelectedItems、あなたのフィールドを作成しますActivity(最初は空のリストになります):

final List<Integer> mSelectedItems = new ArrayList<Integer>();

および呼び出しメソッド:

public void addCondition(View view) {
    SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null);
    Cursor f = db.rawQuery("select * from assetobservationtypes", null);  
    Log.e("Asset Helper Types:", "Cursor run");
    List<CharSequence> mHelperNames = new ArrayList<CharSequence>();
    final ArrayList<String> mHelperNamesID= new ArrayList<String>();  
    while(f.moveToNext()) {
        mHelperNames.add(f.getString(f.getColumnIndex("Observation")));
        mHelperNamesID.add(f.getString(f.getColumnIndex("AssetObsID")));
    }
    f.close();
    boolean[] checkedItems = new boolean[mHelperNames.size()];
    for (int  i = 0; i < checkedItems.length; i++) {
        checkedItems[i] = false;
    }
    for (int i = 0; i < mSelectedItems.size(); i++) {
        checkedItems[mSelectedItems.get(i).intValue()] = true;
    }
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("My Title").setMultiChoiceItems(mHelperNames.toArray(new CharSequence[mHelperNames.size()]), checkedItems,
                        new DialogInterface.OnMultiChoiceClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,
                                    int which, boolean isChecked) {
                                if (isChecked) {

                                    mSelectedItems.add(which);
                                } else if (mSelectedItems.contains(which)) {

                                    mSelectedItems.remove(Integer
                                            .valueOf(which));
                                }
                            }
                        })

               .setPositiveButton("Save", new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int id) {                      
                       txtCondition.setText("set");
                       txtCondition.setTextColor(Color.parseColor("#4c9226"));
                       count++;
                   }
               })
               .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                   @Override
                   public void onClick(DialogInterface dialog, int id) {
                       dialog.dismiss();
                   }
               });
        builder.show();
}

リストは同じである必要があることに注意してくださいmHelperNames(値を変更することはできませんCursor)。そうしないと、チェックされたアイテムとチェックされていないアイテム、または例外の間で不整合が生じるリスクがあります。私はコードが正しいことを願っています、私はそれをテストしませんでした。

于 2012-11-26T17:12:04.707 に答える