1

我正在尝试ListView通过对话框删除一个项目,但是该项目 ( message) 是在单独的onClick()事件中创建的:

final Button addButton = (Button) findViewById(R.id.Button1);
addButton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        Context context = getApplicationContext();
        CharSequence addToast = "Choice added";
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(context, addToast, duration);
        adapter.remove(dMessage);
        EditText editText = (EditText) findViewById(R.id.edit_choice);
        String message = editText.getText().toString();
        adapter.add(message);
        toast.show();
        editText.setHint(R.string.edit_another_choice);
        editText.setText(null);
    }
});

当我使用对话框时,onClick()我希望它删除message我正在尝试执行的选定项:

listView.setOnItemClickListener(new OnItemClickListener(){

    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setCancelable(true);
        builder.setTitle("Delete choice");
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                int index = listView.getSelectedItemPosition();
                adapter.remove(adapter.getItem(index));
            }
        });

我不能这样做,adapter.remove(message);因为message在选择按钮时必须以另一种方法创建,所以我尝试使用该getSelectedItemPosition()方法,但它正在抛出一个ArrayOutOfBoundsException我觉得解决方案可能是一个简单的解决方案,但我无法弄清楚。任何帮助,将不胜感激。

4

1 回答 1

3

您不必调用 getSelectedItemPosition。您已经从 onItemClick 参数中获得了位置。

IDE 自动生成方法签名,如下所示:

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

相反,把它改成这个,它会更有意义

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

我猜想(如果你好奇,你可以调试或记录来确认),没有选定的项目,所以 getSelectedItemIndex 可能返回 -1 表示“没有选择”。这将解释索引越界异常。

于 2013-03-07T21:02:28.170 回答