按钮单击方法如何找出ListView中选择的项目?

时间:2010-09-08 13:05:46

标签: java android listview

我有一个单独的屏幕,ListView下方有一组按钮。当我滚动时,ListView上的条目以橙色亮起,因此我假设已选中。当我按下“删除”按钮时,我希望onClickListener删除当前选定的条目。但getSelectedItemPosition()总是给我-1。如果我不希望以这种方式使用GUI控件,请给我另一种获得相同结果的方法。

我甚至尝试设置列表视图的onClickListener以在按下按钮之前存储索引(如果按下按钮取消选择条目),但即使这似乎总是-1。

这是代码(没有修改但没有用)

package com.bayley;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import java.util.ArrayList;

/**
 *
 * @author p0074564
 */
public class September extends Activity {

 /** Called when the activity is first created. */


 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);

  final ListView myListView = (ListView) findViewById(R.id.myListView);
  Button addButton = (Button) findViewById(R.id.AddButton);
  Button deleteButton = (Button) findViewById(R.id.DeleteButton);
  final EditText editText = (EditText) findViewById(R.id.myEditText);

  final ArrayList<String> todoItems = new ArrayList<String>();
  todoItems.add("Monday");
  todoItems.add("Tuesday");
  todoItems.add("Wednesday");

  final ArrayAdapter<String> aa =
   new ArrayAdapter<String>(this,
     android.R.layout.simple_list_item_1, todoItems);
  myListView.setAdapter(aa);

  addButton.setOnClickListener(new 
    Button.OnClickListener() {
   public void onClick(View v) {
    todoItems.add(editText.getText().toString());
    aa.notifyDataSetChanged();
   }
  });


  deleteButton.setOnClickListener(new 
    Button.OnClickListener() {
   public void onClick(View v) {
    // always returns -1 unfortunately ie nothing is ever selected
    int index = myListView.getSelectedItemPosition();
    if (index >= 0) {
     todoItems.remove(index);
    }
    aa.notifyDataSetChanged();
   }
  });



 }
}

2 个答案:

答案 0 :(得分:0)

正如我在评论中已经提到的,我不知道你是否可以将OnFocusChangedListener附加到列表中的项目,但我确信这可能是一些方法,尽管它不会真正帮助你。

但也许下面的两个选项对你来说可能都很有趣。

  1. 实施项目上下文菜单,该菜单会在您长按项目时显示。在此上下文菜单中,您可以提供删除操作。您将在处理某种列表的许多不同Android应用上看到此行为。看看这个blog post

  2. 让您列出能够选择多个项目。有关更多信息,请参阅this question。通过这种方式,您可以一次删除多个项目。

答案 1 :(得分:0)

我修改了你的代码..它的工作

public class Selectlistitem extends Activity {
    int pos;

 /** Called when the activity is first created. */


 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);

  final ListView myListView = (ListView) findViewById(R.id.widget34);
  Button addButton = (Button) findViewById(R.id.btnadd);
  Button deleteButton = (Button) findViewById(R.id.btnremove);
  final EditText editText = (EditText) findViewById(R.id.txt1);

  final ArrayList<String> todoItems = new ArrayList<String>();
  todoItems.add("Monday");
  todoItems.add("Tuesday");
  todoItems.add("Wednesday");

  final ArrayAdapter<String> aa =
   new ArrayAdapter<String>(this,
     android.R.layout.simple_list_item_1, todoItems);
  myListView.setAdapter(aa);

  addButton.setOnClickListener(new
    Button.OnClickListener() {
   public void onClick(View v) {
    todoItems.add(editText.getText().toString());
    aa.notifyDataSetChanged();
   }
  });

myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> list, View v, int pos, long id) {
        aa.getItem(pos);
        editText.setText(""+pos);
    }
});
  deleteButton.setOnClickListener(new
    Button.OnClickListener() {
   public void onClick(View v) {
    // always returns -1 unfortunately ie nothing is ever selected
//    int index = myListView.getCheckedItemPosition();
      int index=pos;
    if (index >= 0) {
     todoItems.remove(index);
    }
    editText.setText(""+index);
    aa.notifyDataSetChanged();
   }
  });



 }
}