我正在尝试通过对话框删除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
{1}}我觉得解决方案可能很容易解决,但我无法弄清楚。任何帮助将不胜感激。
答案 0 :(得分: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来表示“没有选择”。这可以解释索引超出范围的异常。