ListView を使用した AlertDialog があり、チェックされた項目を取得する方法がわかりません... AlertDialog では、コードでビューを作成します。私の問題を解決してください。
アラートダイアログ。正しい作業:
public class MyDialog {
......
AlertDialog.Builder adb;
private Dialog onCreateDialog(int id, Context context) {
workWithDB = new WorkWithDB(context);
adb = new AlertDialog.Builder(context);
switch (id) {
case ActivityMain.DIALOG_ADD_BUTTONS:
adb.setTitle(R.string.app_name);
adb.setIcon(android.R.drawable.ic_input_add);
adb.setPositiveButton(R.string.dialogAddBtn, myClickListener);
adb.setNeutralButton(R.string.dialogConfirmChangesCancel, myClickListener);
adb.setView(addBtnView());
return adb.create();
}
return onCreateDialog(id, context);
}
OnClickListener myClickListener = new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Main.editor.putBoolean("continue", true);
// Main.editor.commit();
switch (id) {
case ActivityMain.DIALOG_ADD_BUTTONS:
// some code
break;
}
}
};
public void showDialog(int id, Context context /* some parametres*/){
onCreateDialog(id, context);
adb.show();
}
protected void setViewForAddBtnView(ListView lstView){
this.lstView = lstView;
}
protected View addBtnView(){
LinearLayout llMain = new LinearLayout(context);
RadioGroup rGroupWhereAddBtns = new RadioGroup(context);
RadioButton top = new RadioButton(context), bottom = new RadioButton(context);
top.setText(context.getResources().getString(R.string.addBtnTop));
bottom.setText(context.getResources().getString(R.string.addBtnBottom));
rGroupWhereAddBtns.setOrientation(RadioGroup.HORIZONTAL);
rGroupWhereAddBtns.addView(top);
rGroupWhereAddBtns.addView(bottom);
llMain.setOrientation(LinearLayout.VERTICAL);
llMain.addView((new MyMsg()).view(context, " " + message, Color.BLACK, ActivityMain.messageTextSize + 2, Gravity.LEFT));
llMain.addView(rGroupWhereAddBtns);
llMain.addView(lstView);
return llMain;
}
}
メインクラスのいくつかのメソッド(アクティビティを拡張):
private ListView createListViewForAddBtnDialog(){
LinkedHashMap<String, String> mapOfBtn;
SimpleAdapter adapterAddBtnDialog;
ListView lstViewBtnAdd = new ListView(this);
SQLiteDatabase dbBtn = calcDbHelper.getReadableDatabase();
Cursor cc = dbBtn.query(CalcDBHelper.TABLE_BUTTONS, null, "profileName = 'unnamed' and orientation = '"+ orient + "' and canBeAdded = 1", null, null, null, null);
//try {
if (cc.moveToFirst()){
//(new WorkWithDB(context)).showButtonsTable();
Log.d(ActivityMain.LOG_TAG, "cursor count = " + cc.getCount());
listOfBtn = new ArrayList<Map<String,String>>(cc.getCount());
int btnIdIndex = cc.getColumnIndex(CalcDBHelper.BTN_ID);
do{
mapOfBtn = new LinkedHashMap<String, String>();
mapOfBtn.put(ActivityMain.btnId, getBtn.getBtnTextViaId(cc.getInt(btnIdIndex)));
listOfBtn.add(mapOfBtn);
} while(cc.moveToNext());
}
for(int i = 0; i < listOfBtn.size(); i++){
Log.d(ActivityMain.LOG_TAG, "pos " + i + " text - " + listOfBtn.get(i));
}
adapterAddBtnDialog = new SimpleAdapter(this, listOfBtn, R.layout.dialog_add_btn_item, FROM, TO);
lstViewBtnAdd.setAdapter(adapterAddBtnDialog);
lstViewBtnAdd.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(ActivityMain.LOG_TAG, "!!!!!!! - "); // never call :(((
}
});
return lstViewBtnAdd;
}
私は AlertDialog を次のように呼び出します。
myDialog.setViewForAddBtnView(createListViewForAddBtnDialog());
myDialog.showDialog(DIALOG_ADD_BUTTONS, getResources().getString(R.string.dialogAddBtnWhereToAdd), this, this, null, orient);
そしてそれは次のように見えます
https://www.dropbox.com/s/r2hqb9a9nt9g4hm/alertDlg.png (画像を添付できません)
しかし、要素(checkBoxes)を選択しようとすると、何も起こりません...助けてください。