繁体   English   中英

如何从ListView获取所选项目?

[英]How to get the selected item from ListView?

在我的Android应用程序中,我创建了一个名为myList的ListView组件,并用我自己的自定义类型的对象填充它:

class MyClass{

    private String displayName;
    private String theValue;
... //here constructor, getters, setters and toString() are implemented

}

我使用ArrayAdapter将ArrayList theObjects绑定到myList:

ArrayAdapter<MyClass> adapter= 
                new ArrayAdapter<MyClass>(this, R.layout.lay_item, theObjects);
myList.setAdapter(adapter);

这工作正常,列表填充等等,但当我尝试访问所选项目时,我收到一个Null对象。 我已经完成了这个

myList.setOnItemClickListener(new OnItemClickListener() {

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

MyClass selItem = (MyClass) myList.getSelectedItem(); //
String value= selItem.getTheValue(); //getter method

}

什么似乎是问题? 谢谢

默认情况下,当您单击ListView项时,它不会将其状态更改为“已选择”。 所以,当事件发生时你会这样做:

myList.getSelectedItem();

该方法没有任何回报。 你要做的是通过这样做来使用位置并获得底层对象:

myList.getItemAtPosition(position);

您正在实现Click Handler而不是Select Handler。 默认情况下,列表不会选择。

在上面的例子中,你应该改变的是

public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
    MyClass item = (MyClass) adapter.getItem(position);
}

on onItemClick

String text = parent.getItemAtPosition(position).toString();

由于onItemClickLitener()本身会为您提供所选项的索引,因此您只需执行getItemAtPosition(i).toString() 代码段如下: -

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            String s = listView.getItemAtPosition(i).toString();

            Toast.makeText(activity.getApplicationContext(), s, Toast.LENGTH_LONG).show();
            adapter.dismiss(); // If you want to close the adapter
        }
    });

在上面的方法中, i参数实际上为您提供所选项目的位置。

myList.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> adapter, View v, int position, long id) {
      MyClass selItem = (MyClass) adapter.getItem(position);
   }
}

使用setOnItemClickListener是正确的答案,但是如果你有一个键盘,你甚至可以用箭头更改选择(不执行任何点击),因此,你还需要实现setOnItemSelectedListener:

myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
     MyObject tmp=(MyObject) adapterView.getItemAtPosition(position);
         }
            @Override
            public void onNothingSelected(AdapterView<?> adapterView) {
                // your stuff
            }
        });

触摸模式下 ,没有焦点也没有选择。 您的UI应使用不同类型的窗口小部件,例如单选按钮,以供选择。

ListView上关于这个的文档非常糟糕,只是对setSelection的一个模糊提及。

虽然我使用kotlin ,但以下代码回答了您的问题。 返回所选项目:

val item = myListView.adapter.getItem(i).toString()

以下是整个selecteditem监听器

myListView.setOnItemClickListener(object : OnItemClickListener {
       override fun onItemClick(parent: AdapterView<*>, view: View, i: Int,
                        id: Long) {
           val item = myListView.adapter.getItem(i).toString()

       }
    })

该代码返回由其索引i单击的项目,如代码中所示

MyClass selItem =(MyClass)myList.getSelectedItem(); //

你从未实例化过你的课程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM