Java 按钮单击方法如何确定在ListView中选择了哪个项目?

Java 按钮单击方法如何确定在ListView中选择了哪个项目?,java,android,listview,Java,Android,Listview,我有一个单独的屏幕,在列表视图下面有一组按钮。当我滚动时,ListView上的条目以橙色亮起,因此我假设已选中。当我按下“删除”按钮时,我希望onClickListener删除当前选择的条目。但是getSelectedItemPosition()总是给我-1。如果我不希望以这种方式使用GUI控件,请给我另一种获得相同结果的方法 我甚至尝试过在按下按钮之前将列表视图的onClickListener设置为存储索引(以防按下按钮取消选择条目),但即使是这样,似乎也总是-1 这是代码(没有修改,修改不起

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

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

这是代码(没有修改,修改不起作用)

package com.bayley;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.ListView;
导入java.util.ArrayList;
/**
*
*@作者p0074564
*/
公开课九月延长活动{
/**在首次创建活动时调用*/
@凌驾
创建公共空间(捆绑冰柱){
超级冰柱;
setContentView(R.layout.main);
最终ListView myListView=(ListView)findViewById(R.id.myListView);
Button addButton=(Button)findViewById(R.id.addButton);
按钮deleteButton=(按钮)findViewById(R.id.deleteButton);
final EditText EditText=(EditText)findViewById(R.id.myEditText);
最终ArrayList todoItems=新ArrayList();
todoItems.add(“星期一”);
todoItems.add(“星期二”);
todoItems.添加(“星期三”);
最终阵列适配器aa=
新阵列适配器(此,
android.R.layout.simple_list_item_1,todoItems);
myListView.setAdapter(aa);
addButton.setOnClickListener(新
Button.OnClickListener(){
公共void onClick(视图v){
添加(editText.getText().toString());
aa.notifyDataSetChanged();
}
});
deleteButton.setOnClickListener(新建
Button.OnClickListener(){
公共void onClick(视图v){
//始终返回-1不幸的是,未选择任何内容
int index=myListView.getSelectedItemPosition();
如果(索引>=0){
todoItems.remove(索引);
}
aa.notifyDataSetChanged();
}
});
}
}

正如我在评论中已经提到的,我不知道您是否可以将OnFocusChangedListener附加到列表的项目,但我非常确定这是可能的,尽管它不会真正帮助您

但也许下面的两个选项都会让你感兴趣

  • 实现一个在长时间单击某个项目时显示的项目关联菜单。在此上下文菜单中,您可以提供删除操作。你会在许多不同的Android应用程序上看到这种行为,这些应用程序处理某种列表。看看这个

  • 使您的列表能够选择多个项目。有关更多信息,请参阅。通过这种方式,您可以一次删除多个项目


  • 我知道是什么修改了你的代码。。它起作用了

    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();
       }
      });
    
    
    
     }
    }
    
    public类Selectlistitem扩展活动{
    int pos;
    /**在首次创建活动时调用*/
    @凌驾
    创建公共空间(捆绑冰柱){
    超级冰柱;
    setContentView(R.layout.main);
    最终ListView myListView=(ListView)findViewById(R.id.widget34);
    按钮addButton=(按钮)findViewById(R.id.btnadd);
    按钮deleteButton=(按钮)findViewById(R.id.btnremove);
    final EditText EditText=(EditText)findViewById(R.id.txt1);
    最终ArrayList todoItems=新ArrayList();
    todoItems.add(“星期一”);
    todoItems.add(“星期二”);
    todoItems.添加(“星期三”);
    最终阵列适配器aa=
    新阵列适配器(此,
    android.R.layout.simple_list_item_1,todoItems);
    myListView.setAdapter(aa);
    addButton.setOnClickListener(新
    Button.OnClickListener(){
    公共void onClick(视图v){
    添加(editText.getText().toString());
    aa.notifyDataSetChanged();
    }
    });
    myListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
    公共链接(AdapterView列表、视图v、内部位置、长id){
    aa.采购项目(pos);
    editText.setText(“+pos”);
    }
    });
    deleteButton.setOnClickListener(新建
    Button.OnClickListener(){
    公共void onClick(视图v){
    //始终返回-1不幸的是,未选择任何内容
    //int index=myListView.getCheckEditePosition();
    int-index=pos;
    如果(索引>=0){
    todoItems.remove(索引);
    }
    editText.setText(“+”索引);
    aa.notifyDataSetChanged();
    }
    });
    }
    }
    
    您确定该项目确实被选中了吗。我想这可能只是重点。好吧,你可能是对的。它以橙色突出显示。我想这意味着它被选中了。也许我的词汇量错了。想一想,可能需要双击才能选中它,但单击按钮会再次取消选中它。有没有办法找出哪个项目是重点?或者,如果单击“删除”按钮失去焦点,也许我可以覆盖onFocus事件以保存聚焦索引?有一个OnFocusChangedListener界面,但我不知道是否可以将此侦听器附加到列表项,但我认为这应该是可能的。但它可能对您没有帮助,因为单击按钮时焦点将丢失。关于另外两种解决问题的方法,请看下面我的答案。非常感谢。我想我用的是OnClickListener而不是McClickListener。我感到非常惊讶的是,按下箭头键会在移动到的项目中引发“项目单击”事件。剩下的唯一一个小问题是,当我点击一个项目时,我希望它保持橙色,这样我就知道如果我按delete键,哪个项目会被删除。我想可能是myListView.setItemChecked(pos,true);(在麦克利克)会给我这个,但它没有。有什么想法吗?
    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();
       }
      });
    
    
    
     }
    }