0

这是一个带有 AlertDialog 的 ListView,用于 Bills 应用程序,当单击每个列表项时,它会弹出支付、编辑或删除选项。然后您选择“支付”或“编辑”,然后在重定向到另一个活动之前收集该选项的相应数据。when delete is selected a different AlertDialog appears for confirmation before deleting.

我有这个工作得很好(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),所以我删除了它然后运行了应用程序,令我惊讶的是它工作了!

我的 listView 项目再次可点击,这带来了我的 AlertDialog,一切都很好。

但后来我也意识到我的 listView_layout 上的所有元素都是 textViews 和“inputType”是完全不必要的!(复制和粘贴错误)所以我尝试删除我所有的“inputTypes”和“focusable”属性然后我再次运行我的应用程序和 listView仍然很好并且可以点击。

因此,如果您在 listView_layout 的元素中具有“inputType”属性,请务必在这些元素中添加:android:focusable="false"。确保您没有在 java 中进行任何与您的 xml 冲突的“可点击”调用。

此外,当您复制和粘贴时,请确保不要留下任何不应该像我一样的东西。

我希望这对许多遇到 OnItemClickListener 问题的人有所帮助。祝你好运!

于 2013-08-16T21:44:16.900 回答