Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android ListView-获取所选项目_Java_Android_Listview_Android Listview_Android Arrayadapter - Fatal编程技术网

Java Android ListView-获取所选项目

Java Android ListView-获取所选项目,java,android,listview,android-listview,android-arrayadapter,Java,Android,Listview,Android Listview,Android Arrayadapter,我已经使用自定义阵列适配器实现了一个列表视图。现在我想获取列表视图中的选定项。我知道有使用onclick侦听器的解决方案。但是,我想使用ListView(AdapterView)类的getSelectedItem()方法。该方法始终返回null。其他getSelected*方法也不起作用 // onCreate mList = (ListView) findViewById(R.id.listView); // set in Broadcast Receiver (inner clas

我已经使用自定义阵列适配器实现了一个列表视图。现在我想获取列表视图中的选定项。我知道有使用onclick侦听器的解决方案。但是,我想使用ListView(AdapterView)类的getSelectedItem()方法。该方法始终返回null。其他getSelected*方法也不起作用

// onCreate
    mList = (ListView) findViewById(R.id.listView);

// set in Broadcast Receiver (inner class)
    mList.setAdapter(new ListAdapter(getApplicationContext(),
                R.layout.list_view_item, R.id.textView,
                itemList));

// onButtonClick
    Log.i(TAG, "Selected: " + mList.getSelectedItem());
OnButtonClick是一个单独按钮的回调。如果我单击它,所选项目应该在logcat中打印,但每次都返回null。有人能帮我吗

XML:


如果我选择了一个项目,颜色会改变。

实现你的类

public class xyz extends Activity implements OnItemSelectedListener
然后给出该活动的详细信息

mList.setOnItemSelectedListener(this);
现在实现所选方法

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
        long id) {
    // u will get the position and selected item here
}
@覆盖
已选择公共位置(AdapterView父对象、视图、整型位置、,
长id){
//您将在此处获得位置和所选项目
}
实现你的课程

public class xyz extends Activity implements OnItemSelectedListener
然后给出该活动的详细信息

mList.setOnItemSelectedListener(this);
现在实现所选方法

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position,
        long id) {
    // u will get the position and selected item here
}
@覆盖
已选择公共位置(AdapterView父对象、视图、整型位置、,
长id){
//您将在此处获得位置和所选项目
}

我检查了getSelectedItem源代码

public Object getSelectedItem() {
    T adapter = getAdapter();
    int selection = getSelectedItemPosition();
    if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
        return adapter.getItem(selection);
    } else {
        return null;
    }
}

也许您应该检查
ListAdapter

中的
getItem
方法,我检查getSelectedItem源代码

public Object getSelectedItem() {
    T adapter = getAdapter();
    int selection = getSelectedItemPosition();
    if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
        return adapter.getItem(selection);
    } else {
        return null;
    }
}

也许你应该检查一下
列表适配器中的
getItem
方法

我发现在触摸设备上从来没有/很少调用所选的方法。 如果您使用emulator交叉导航,并且在带有混合或非触摸控制的特殊设备上,它会启动。只有在滚动列表时才会调用,但单击列表时不会调用


这就是为什么你应该在带有触摸控制的普通平板电脑/智能手机上使用OnItemClickListener的原因。

我发现OnItemSelected方法在触摸设备上从未/很少被调用。 如果您使用emulator交叉导航,并且在带有混合或非触摸控制的特殊设备上,它会启动。只有在滚动列表时才会调用,但单击列表时不会调用


这就是为什么您应该在带有触摸控制的普通平板电脑/智能手机上使用OnItemClickListener。

请发布您的XML我想我没有在您的XML中声明您的项目您能告诉我们更多关于您的应用程序吗?您希望在哪种情况下获取所选项目?@user2572585我对误解感到抱歉:我删除了我的解决方案,因为它显然与您的问题不匹配。@Rick77没问题;)你想帮忙。所以,谢谢。不,不幸的是,它不起作用。不过谢谢你的努力!我想我会在侦听器中使用该解决方案,因为它看起来非常耗时……请发布您的XML我想我没有在您的XML中声明您的项目。您能告诉我们有关您的应用程序的更多信息吗?您希望在哪种情况下获取所选项目?@user2572585我对误解感到抱歉:我删除了我的解决方案,因为它显然与您的问题不匹配。@Rick77没问题;)你想帮忙。所以,谢谢。不,不幸的是,它不起作用。不过谢谢你的努力!我想我会在侦听器中使用这个解决方案,因为它看起来非常耗时……ChinaAnichen的答案非常有趣:getAdapter的Log.d是什么,getCount,在getSelectedItem之前?是的,答案很有趣。但是,自定义适配器不是问题所在。看来一切都好。我也用ArrayAdapter试过了,我也遇到了同样的问题。ChinaAnichen的答案很有趣:getAdapter的Log.d是什么,getCount,在getSelectedItem之前?是的,答案很有趣。但是,自定义适配器不是问题所在。看来一切都好。我也用ArrayAdapter试过了,我也遇到了同样的问题。上的这篇博文有更多的背景。上的这篇博文有更多的背景。