2016-12-04 51 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