メニュー項目をクリックし、何かを行うための1つまたは複数の項目を選択するための複数の選択肢を持つ警告ダイアログを表示したい。 私はすでに別のチュートリアルから多くの例を試しましたが、本当に私のニーズに合ったものはありません。 タスクはここから開始します: メニューからlistitemsでAlertDialogを呼び出す
ユーザはメインアクティビティからメニューを開き、カテゴリを削除する項目を選択します。今まで
MainActivityはこのように定義されています。ここ
public class MainActivity extends AppCompatActivity implements View.OnClickListener,
AdapterView.OnItemSelectedListener,SearchView.OnQueryTextListener,SearchView.OnCloseListener {
は、オプションメニューのソースコードです:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actions, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_clear_all:
clearDoneItems();
this.items_adapter.notifyDataSetChanged();
break;
case R.id.action_select_all:
selectAllItems();
this.items_adapter.notifyDataSetChanged();
break;
case R.id.action_delete_done_items:
deleteDoneItems();
break;
case R.id.action_delete_all:
deleteAllItems();
break;
case R.id.action_add_category:
add_category("");
break;
case R.id.action_delete_category:
del_category();
break;
}
return super.onOptionsItemSelected(item);
}
これは、1つ以上の選択されたアイテムを削除するために呼び出す現在のメソッドです:
public void del_category() {
LayoutInflater li = LayoutInflater.from(MainActivity.this);
View dialogView = li.inflate(android.R.layout.select_dialog_multichoice, null);
/* wb, 31Oct2017: preparation for list in delete categories */
final ArrayList<Integer> sList = new ArrayList<Integer>();
String[] delCats = new String[list_categories.size()];
boolean iCount[] = new boolean[delCats.length];
String msg ="";
for (int i = 0; i == list_categories.size(); i++) {
if (!list_categories.get(i).getSpinnerCategory().equals(" PLEASE SELECT A CATEGORY"))
{delCats[i] = list_categories.get(i).getSpinnerCategory();}
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialogView)
.setTitle("Delete categories")
.setMessage("Please select categories to be deleted")
.setMultiChoiceItems(delCats, iCount, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1, boolean arg2) {
if (arg2) {
sList.add(arg1);
} else if (sList.contains(arg1)) {
// if the item is already selected then remove it
sList.remove(Integer.valueOf(arg1));
}
}
}
)
.setCancelable(false)
.setPositiveButton
(
"Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "So far", Toast.LENGTH_SHORT).show();
}
}
)
.setNegativeButton
("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "No Option Selected", Toast.LENGTH_SHORT).show();
}
}
);
//Creating dialog box
AlertDialog dialog = builder.create();
dialog.show();
}
私はAndroidプログラミングにとって非常に新しいので、すべてがうまくいきません。
私がリスト "delCats []"を記入する理由は、元のソース( "list_categories")で、XMLファイルから保存されたすべてのカテゴリがaから定義されていますクラス「CategoryTask.java」を作成しました。しかし、 "builder.setMultiChoiceItems()"メソッドは、最初のパラメータに対してこのような型を受け入れません。したがって、ループを使用してカテゴリをリスト "delCats"に引き継ぎます。
カテゴリの最初の項目( "PLEASE SELECT ...")は引き継がれません。実際のカテゴリではなく、アイテムを保存する前にユーザーがアイテムの正しいカテゴリを選択する必要があるため、既存のアイテムのみが存在します。
ここで誰かが私が間違っていたことを私に言わせてくれることを願っています。右のチェックボックスでカテゴリが表示されないのはなぜですか。私は見ることができる1つのチェックボックスをクリックすることさえできません。
デバッグセッション中、delCatのすべての項目が使用可能で、チェックボックスのすべての値がブール値配列 "icount"の "false"に設定されていることがわかります。
多くのおかげで、事前アンドレアスで
編集: 私はforループに変更。あなたは「delCats'と 『ICOUNTは』正しい方法で満たされている見ることができます。しかし、結果には変化残っていないので:。
編集2: は私がのために何か問題があることが表示されません私はそれをコメントから私の投稿への提案に変更したとしても、アプリケーションはクラッシュしています。
私は既に上記スクリーンショットでそれを示しました: ループは正常に動作しています。 delCatとiCountが正しく入力されているので、別の部分に問題があります。
デバッグでは、dialog.show()にはアプリケーションがクラッシュすることが示されています。ステートメント。 もう一つの興味深い点:私が実行時にdelCatsでfor-loopを使用している文字列配列を使用した場合、私はアラートを作成することができました。 タイプが異なる必要があると思いますが、理由は分かりません。そして出力は私が見たいと思ったものではありません。これはリストだけですが、チェックボックスはなく、1つのアイテムをクリックするだけです。
あなたはまだいくつかの問題があると思っていますが、それでも解決策はありません。
多くのご意見ありがとうございます。私はその方法で投稿を編集する。 Forループは "<"ではなく "<"でのみ機能します。それは私がfirlst項目を取ることはありませんcozかもしれません。 サンプルコードが面白そうです。 Unfortunatelly私は "Array.asList(value)..."の "vale"に何を設定するか分からない。私にヒントを教えてください。 –
あなたのコードの問題はforループで "=="でした。 "<="または "<"はあなたの問題を解決しているはずです。今はあなたのコードは大丈夫ですし、うまくいくはずです。あなたにはもう何か問題がありますか? – Anonymous
はい、あります。私は長い間報道をしません。私がスクリーンショットをつけたので、ユーザーはメニュー項目をクリック/タッチし、警告がポップアップし、ユーザーは1つまたは複数のカテゴリーを選択し、次にポジティブボタンをクリックしてカテゴリーを削除する必要があります。現時点ではまだそれは以前のようなものです。それでも、 "Arrays.asList(value).get(which)"の "value"の意味を理解できません。 私のアプリは今のところ "dialog.show"となり、デバッガを実行する理由を見ることができません。ごめんなさい! –