現在、android studioでアプリを作成しております。
画面上にスピナーとリストビューを配置し、スピナーの切り替えにより、リストビューの表示を切り替えるということをしております。
その中でリストビューの項目をタップすると選択した項目のを編集する画面に遷移し、項目を長押しするとアラート画面を表示し、削除できるようにしたいと思っているのですが、アラート画面でボタンをタップするとリストビューの項目をタップした時の処理が走ってしまい、項目の編集画面に遷移してしまいます。
だだづくりではありますがコードを記載させて頂きます。
アドバイスをお願いいたします。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.add_products); dbAdapter = new DBAdapter_Genre(this); dbAdapter.openDB(); // DBの読み込み(読み書きの方) spinner = (Spinner)findViewById(R.id.products_Spinner01); // ArrayListを生成 items = new ArrayList<>(); // DBのデータを取得 String[] columns = {DBAdapter_Genre.COL_GENRE}; // DBのカラム:品名 Cursor c = dbAdapter.getDB(columns); if (c.moveToFirst()) { do { items.add(c.getString(0)); Log.d("取得したCursor:", c.getString(0)); } while (c.moveToNext()); } c.close(); dbAdapter.closeDB(); // DBを閉じる ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // spinner に adapter をセット spinner.setAdapter(adapter); // リスナーを登録 spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { // アイテムが選択された時 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinner = (Spinner) parent; item = (String) spinner.getSelectedItem(); dbAdapter_products = new DBAdapter_Products(getApplicationContext()); dbAdapter_products.openDB(); // DBの読み込み(読み書きの方) mListViewProducts = (ListView) findViewById(R.id.listview_pro); // 各部品の結び付け // ArrayListを生成 items_products = new ArrayList<>(); String column = "genre"; //検索対象のカラム名 String[] name = {item}; //検索対象の文字 // DBのデータを取得 String[] columns_products = {DBAdapter_Products.COL_PRODUCTS}; // DBのカラム:品名 Cursor c_pro = dbAdapter_products.getDB(columns_products, column, name); if (c_pro.moveToFirst()) { do { items_products.add(c_pro.getString(0)); Log.d("取得したCursor:", c_pro.getString(0)); } while (c_pro.moveToNext()); } c_pro.close(); dbAdapter_products.closeDB(); // DBを閉じる // ArrayAdapterのコンストラクタ // 第1引数:Context // 第2引数:リソースとして登録されたTextViewに対するリソースID 今回は元々用意されている定義済みのレイアウトファイルのID // 第3引数:一覧させたいデータの配列 adapter_products = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, items_products); mListViewProducts.setAdapter(adapter_products); //ListViewにアダプターをセット(=表示) // ArrayAdapterに対してListViewのリスト(items)の更新 adapter_products.notifyDataSetChanged(); mListViewProducts.setOnItemClickListener(new AdapterView.OnItemClickListener(){ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // // 選択された項目 String selectedItemStr = (String)mListViewProducts.getItemAtPosition(position); Intent intent = new Intent(getApplicationContext(), AddProductsItem.class); // インテントにセット intent.putExtra("mode","1"); intent.putExtra("genre", item); intent.putExtra("products", selectedItemStr); // Activity をスイッチする startActivity(intent); } }); //リスト項目が長押しされた時のイベントを追加 mListViewProducts.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { // アラートダイアログ表示 AlertDialog.Builder builder = new AlertDialog.Builder(AddProducts.this); builder.setTitle("削除"); builder.setMessage("削除しますか?"); // OKの時の処理 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // // IDを取得する // myListItem = items.get(position); // int listId = myListItem.getId(); // 選択された項目 String selectedItemStr = (String)mListViewProducts.getItemAtPosition(position); dbAdapter_products.openDB(); // DBの読み込み(読み書きの方) dbAdapter_products.selectDelete(item, selectedItemStr); // DBから取得したIDが入っているデータを削除する Log.d("Long click : ", selectedItemStr); dbAdapter_products.closeDB(); // DBを閉じる // loadMyList(); } }); builder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); // ダイアログの表示 AlertDialog dialog = builder.create(); dialog.show(); return false; } }); } // アイテムが選択されなかった public void onNothingSelected(AdapterView<?> parent) { // } }); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/12 10:24
2017/10/12 11:03 編集
2017/10/13 09:25 編集