0

これは Bills アプリ用の AlertDialog を備えた ListView で、各リスト項目がクリックされたときに支払い、編集、または削除のオプションが表示されます。次に、「支払い」または「編集」を選択すると、そのオプションに対応するデータが収集されてから、別のアクティビティにリダイレクトされます。削除を選択すると、削除する前に確認のために別の AlertDialog が表示されます。

私はこれをうまく機能させました(listViewアイテムはクリック可能でした)が、今は何もありません。私は自分のコードを何度も見直しましたが、困惑しています。きっと些細なことだろうけど、一生分からない。

ここで何が欠けているのか誰か教えてもらえますか?

final Context context = this;
    ArrayList<BillArray> bills = db.getBillArray();

    final ListView lv = (ListView) findViewById(R.id.list);
    lv.setAdapter(new MyCustomBaseAdapter(this, bills));

    lv.setOnItemClickListener(new OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {

            Object o = lv.getItemAtPosition(position);
            final BillArray fullObject = (BillArray)o;
            Toast.makeText(MainActivity.this, "You've chosen: "+" "+ fullObject.getVendor(),
                    Toast.LENGTH_SHORT).show();

            final CharSequence[] items = { "Pay Bill", "Edit", "Delete" };

              AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
              builder.setTitle("Options for:\n"+ fullObject.getVendor());
              builder.setIcon(R.drawable.ic_launcher);
              builder.setItems(items, new DialogInterface.OnClickListener() {

                  public void onClick(DialogInterface dialog, int item) {

                      Toast.makeText(getApplicationContext(), items[item] + " selected", 
                              Toast.LENGTH_SHORT).show();

                      if(items[item] == "Pay Bill"){
                          // LOAD "PAY BILL" PAGE

                          Intent payBill = new Intent(context, PayBillActivity.class);
                          payBill.putExtra("id", fullObject.getId());
                          payBill.putExtra("vendor", fullObject.getVendor());
                          payBill.putExtra("acct", fullObject.getAcct());
                          payBill.putExtra("payment", fullObject.getPayment());
                          payBill.putExtra("mindue", fullObject.getMinDue());
                          payBill.putExtra("tDue", fullObject.getTdue());
                          payBill.putExtra("tBal", fullObject.getTbal());

                          final int result = 1;
                            startActivityForResult(payBill, result);
                      }

                      if(items[item] == "Edit"){
                          // LOAD "EDIT" PAGE

                          Intent editBill = new Intent(context, EditBillActivity.class);
                          editBill.putExtra("id", fullObject.getId());
                          editBill.putExtra("vendor", fullObject.getVendor());
                          editBill.putExtra("acct", fullObject.getAcct());
                          editBill.putExtra("payment", fullObject.getPayment());
                          editBill.putExtra("typePos", fullObject.getTypePos());
                          editBill.putExtra("billType", fullObject.getBillType());
                          editBill.putExtra("billDay", fullObject.getBillDay());
                          editBill.putExtra("mindue", fullObject.getMinDue());
                          editBill.putExtra("amtPaid", fullObject.getAmtPaid());
                          editBill.putExtra("tDue", fullObject.getTdue());
                          editBill.putExtra("tBal", fullObject.getTbal());

                          final int result = 1;
                            startActivityForResult(editBill, result);
                      }

                      if(items[item] == "Delete"){
                          // POP-UP CONFIRMATION DIALOG W/ "DELETE" AND "CANCEL" BUTTON
                          AlertDialog.Builder delCon = new AlertDialog.Builder(MainActivity.this);
                          delCon.setTitle("DELETE " + fullObject.getVendor() + "?");
                          delCon.setPositiveButton("DELETE", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                db.deleteBill(fullObject);

                                Toast.makeText(getApplicationContext(), "DELETED",
                                        Toast.LENGTH_LONG).show();

                                Intent intent = getIntent();
                                finish();
                                startActivity(intent);
                            }
                          });                             
                          delCon.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                Toast.makeText(getApplicationContext(), "DELETION CANCELLED",
                                        Toast.LENGTH_LONG).show();
                            }                                 
                          });
                          AlertDialog confirm = delCon.create();
                          confirm.show();
                      }
                  }
              });
              AlertDialog alert = builder.create();               
              alert.show();
        }
    });
4

1 に答える 1

0

数日間の調査、試行錯誤、拳いっぱいの髪の毛の数日後;)私は自分の問題に対する答えを見つけました!

listView.setClickable(true) を使用してみましたが、うまくいきませんでした。次に、listView_layout.xml ファイルに移動し、focusable="false" を追加しようとしましたが、役に立ちませんでした。

その後、以前に設定した listView.setClickable(true) を削除するのを忘れていたことに気付いたので、それを削除してからアプリケーションを実行したところ、驚いたことに IT が機能しました!

私のlistViewアイテムは再びクリック可能になり、AlertDialogが表示され、すべてうまくいきました。

しかし、その後、listView_layout のすべての要素が textViews であり、「inputType」が完全に不要であることに気付きました!(コピー & ペースト エラー) そこで、「inputTypes」と「focusable」属性をすべて削除してから、アプリを再度実行して listViewまだ良好でクリック可能でした。

そのため、listView_layout の要素内に「inputType」属性がある場合は、それらの要素内にも必ず android:focusable="false" を追加してください。XMLと競合するJava内で「クリック可能な」呼び出しを行っていないことを確認してください。

また、コピーして貼り付けるときは、私のように、あるべきではないものを残さないようにしてください。

これが、OnItemClickListener の問題を抱えている多くの人に役立つことを願っています。幸運を!

于 2013-08-16T21:44:16.900 に答える