2016-12-04 38 views
3

Stackoverflowは本当にこのレベルになるのを助けてくれました。皆さん、ありがとうございました。listViewで選択された項目から要素を取得

基本的には、ListViewで選択した項目の要素(データ全体ではない部分)を取得したいとします。私はそれがカーソルを使用して行うことができたが、成功していないことをここで読んだ。これは関連するスニペットです:正しく

{name="xyz_name", uname="xyz_user", desig="xyz_desig"}

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)は私に(アレイ、私は仮定)を提供します。

私は、このことからunameをフェッチする、としたいので、それを取得するためにカーソルを使用しているが、上記のスニペットは、詳細を追加し、

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

をエラーを与えている:私は、テキストを取得していますlistViewアイテムに正しく関連付けられています。私は実際に検索されたデータのサブ部分を望んでいます。たとえば、取得されたデータは、明らかに名前とその役割を含む配列です。さて、私は配列内の 'role'要素を取得したいだけです。データは配列として取得されるので、私がネットで検索したのは、カーソルを使用してさまざまな要素を取得できることです。あなたは今私を得たと思う。

私の側では愚かな構文エラーがあるようです。あなたは何か選択肢があれば教えてください。

感謝:)

+0

'getItemAtPosition() 'で行ったことを示してください。 – Opiatefuchs

+0

@Opiatefuchs私はあなたを得ませんでしたか? 'getItemAtPosition(position)'を使うと、選択された項目に関連するデータを含む正しい配列が与えられますが、選択したいと思います。 '{name =" xyz_name "、uname = "xyz_user"、desig = "xyz_desig"} 'カーソルが機能していません。 – Baahubali

答えて

0

で行く、getItemAtPosition(position)はあなたにObjectを返しています。

HashMap<String,String> obj = new HashMap<String,String>();

だから、解決策は、返されたオブジェクトを取得しget("key")機能への使用のために再びHashMapを使用することであるようにあなたは、ハッシュマップオブジェクトに何かを使用している可能性として@Charukaシルバによって投稿答えはあなたのために働いていない可能性があります

それに関連付けられた値を取得します。私は、これはあなたが欲しいものだと思う:

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が私を助けました。リンクを追加する。

これが役に立ちます。

+1

それは働いている!ありがとう。 :) – Baahubali

+1

@Baahubali 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'スタジオに関連する唯一のメソッドは 'getClass()'です – Baahubali

+0

オブジェクトはジェネリック型です。ポジションは重要です。一度それを取得すると、あなたは右クリックした位置は何ですか?そのリスト項目のテキストビューの値を取得する場合は、Objectを使用する必要はありません。必要なものを使用してください。TextView tv = list.getItemAtPosition(position);あなたは文字列にそれを得ることができます...あなたはそれを取得しました –

+0

listViewアイテムに関連付けられたテキストを正しく取得しています。私は実際に検索されたデータのサブ部分を望んでいます。たとえば、取得されたデータは、明らかに名前とその役割を含む配列です。さて、私は配列内の 'role'要素を取得したいだけです。データは配列として取得されるので、私がネットで検索したのは、カーソルを使用してさまざまな要素を取得できることです。あなたは今私を得たと思う。 – Baahubali

関連する問題