【问题标题】:Get element from the selected item in the listView从 listView 中的选定项目中获取元素
【发布时间】:2016-12-04 11:12:15
【问题描述】:

Stackoverflow 确实帮助我达到了这个水平。谢谢大家。

基本上,我想从 ListView 中的选定项目中获取一个元素(子部分而不是整个数据)。我在这里读到它可以使用光标完成,但没有成功。这是关联的sn-p:

listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id) {

                    Cursor member = (Cursor)parent.getItemAtPosition(position);

                    Toast.makeText(getApplicationContext(),
                            "Click ListItem Number "+member.getString(2), Toast.LENGTH_LONG)
                            .show();
                }
            }); 

parent.getItemAtPosition(position) 给了我(我想是数组):

{name="xyz_name", uname="xyz_user", desig="xyz_desig"} 正确。

我想,假设,从这里获取uname,所以,已经使用游标来获取它,但是上面的 sn-p 给出了错误,

java.lang.ClassCastException: java.util.HashMap cannot be cast to android.database.Cursor

添加细节:我正在正确获取与 listView 项关联的文本。我实际上想要检索数据的子部分。例如,检索到的数据显然是一个包含姓名和角色的数组。现在,我只想获取数组中的“角色”元素。由于数据是作为数组检索的,所以我在网上搜索的是我可以使用游标来检索不同的元素。希望你现在得到我。

我身边似乎有一个愚蠢的语法错误。如果您有任何替代方案,请告诉。

谢谢:)

【问题讨论】:

    标签: android listview android-studio


    【解决方案1】:

    走简单的路

    ListView list = (ListView) findViewById(R.id.listview);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
              Object listItem = list.getItemAtPosition(position);
    
            Toast.makeText(getApplicationContext(),"Click ListItem Number"+listItem.getString(), Toast.LENGTH_LONG).show();
           } 
        });
    

    【讨论】:

    • 谢谢,但是Cannot resolve method getString()Object Studio 相关联的唯一方法是getClass()
    • Object 是一个泛型类型。重要的是位置。一旦你得到它,你知道你点击的位置是什么吗?如果您想在该列表项中获取文本视图的值,则无需使用 Object,请使用您想要的。如果它是 TextView tv = list.getItemAtPosition(position);然后你可以把它变成一个字符串......你明白了吗
    • 我正在正确获取与 listView 项关联的文本。我实际上想要检索数据的子部分。例如,检索到的数据显然是一个包含姓名和角色的数组。现在,我只想获取数组中的“角色”元素。由于数据是作为数组检索的,所以我在网上搜索的是我可以使用游标来检索不同的元素。希望你现在得到我。
    【解决方案2】:

    了解您的情况,getItemAtPosition(position) 正在回复您Object

    @Charuka Silva 发布的答案可能对您不起作用,因为您可能使用了类似 HashMap&lt;String,String&gt; obj = new HashMap&lt;String,String&gt;(); 的 hashmap 对象

    因此,解决方案是再次使用 HashMap 来获取返回的对象,并使用get("key") 函数来检索与其关联的值。我想这就是你想要的:

    listView.setAdapter(adapter);
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long id) {
    //Use HashMap here
                        HashMap<String, Object> member = (HashMap<String, Object>) parent.getItemAtPosition(position);
    
    
    //Use obj.get("key") here to retrieve the value associated with the "key"
                  Toast.makeText(getApplicationContext(),"member.get("uname"), Toast.LENGTH_LONG)
                                .show();
                    }
                });
    

    我在我的小项目中遇到了类似的问题,@user1068963 的answer 帮助了我。添加链接。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2012-10-27
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多