2010-09-08 98 views
1

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

我甚至尝试设置列表视图的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(); 
    } 
    }); 



} 
} 
+0

你确定该项目是真正选择。我认为这可能只是重点。 – Flo 2010-09-09 08:40:35

+0

好的,你可能是对的。它以橙色突出显示。我认为这意味着它被选中了。也许我在我的词汇中错了。想想看,也许它需要被双击才能被选中,但是然后点击一下按钮就不会再选择它。有没有办法找出哪个项目的重点?或者,如果点击删除按钮失去焦点,也许我可以重写一个onFocus事件来保存焦点索引? – 2010-09-09 10:38:24

+0

有一个OnFocusChangedListener接口,但是我不知道你是否可以将这个监听器附加到列表项中,但我认为它应该是可能的。但它可能无法帮助你,因为单击按钮时焦点将丢失。对于其他两种处理问题的方法,请看下面的答案。 – Flo 2010-09-09 11:20:14

回答

0

正如我在我的评论已经提到过,我不知道你是否可以附加OnFocusChangedListener到列表的项目,但我非常肯定,这可能是一些如何,但它不会真的帮助你。

但是也许下面的两个选项可能会对你很有意思。

  1. 实现一个项目上下文菜单,当你长时间点击一个项目时出现。在此上下文菜单中,您可以提供删除操作。您将在许多处理某种列表的Android应用程序中看到此行为。看看这个blog post

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

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(); 
    } 
    }); 



} 
} 
+0

非常感谢。我想我使用OnClickListener而不是OnItemClickListener。我很惊讶,按下箭头键会在它移动到的项目中产生“项目点击”事件。唯一剩下的小问题是,当我点击它时,我想要一个项目保持橙色,以便我知道如果按删除哪个项目将被删除。我想也许myListView.setItemChecked(pos,true); (在onItemClick)会给我这个,但它不会。有什么想法吗? – 2011-01-13 18:41:58

相关问题