2016-12-04 54 views
3

Stackoverflow确实帮助我达到了这个级别。谢谢你们。从listView中的选定项获取元素

基本上,我想从ListView中的选定项获取元素(子部分不是全部数据)。我读过这里,它可以使用游标来完成,但没有成功。这是相关的片段:

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,因此,已经使用游标来获取,但上面的代码是给错误,

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

添加细节:我得到的文本与listView项目正确关联。我真正想要的是检索数据的一个子部分。例如,检索的数据显然是一个包含名称和角色的数组。现在,我只想获取数组中的'角色'元素。因为数据是以数组的形式检索的,我在网上搜索的是我可以使用Cursors来检索不同的元素。希望你现在得到了我。

我身边似乎有一个愚蠢的语法错误。如果您有其他选择,请告诉。

谢谢:)

+0

请在'getItemAtPosition()' – Opiatefuchs

+0

@Opiatefuchs上显示你做了什么我没有找到你?使用'getItemAtPosition(position)'给我正确的数组,其中包含与所选项关联的数据,但我想要选择一个子字符串/元素,如从'{name =“xyz_name”uname = “xyz_user”,desig =“xyz_desig”}'游标不能正常工作。 – Baahubali

回答

0

了解你的情况去,getItemAtPosition(position)正在返回你的Object

发表@Charuka席尔瓦答案可能不为你工作,你可能已经使用HashMap对象像HashMap<String,String> obj = new HashMap<String,String>();

所以,解决的办法是用于获取返回的对象,并使用get("key")功能再次使用HashMap中检索与其关联的值。我认为这是你想要什么:

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

我在小项目也有类似的问题和answer通过@ user1068963帮助了我。添加链接。

希望这会有所帮助。

+1

它的工作!谢谢。 :) – Baahubali

+1

@Bahahubali Yayy!我的第一个答案。 :) – Baahubali

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

谢谢,但是 '无法解析方法getString()' 与'Object' Studio关联的唯一方法是getClass()' – Baahubali

+0

Object是一个泛型类型。位置重要。一旦你得到它,你知道你点击的位置是什么吗?如果你想获得该列表项中的文本视图的值,则不需要使用Object,就可以使用你想要的东西..如果它的TextView tv = list.getItemAtPosition(position);那么你可以得到它的字符串...你有没有得到 –

+0

我得到正确的与listView项目相关的文本。我真正想要的是检索数据的一个子部分。例如,检索的数据显然是一个包含名称和角色的数组。现在,我只想获取数组中的'角色'元素。因为数据是以数组的形式检索的,我在网上搜索的是我可以使用Cursors来检索不同的元素。希望你现在得到了我。 – Baahubali