2016-12-04 1 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 항목과 올바르게 연관되어 있습니다. 나는 실제로 검색된 데이터의 하위 부분을 원한다. 예를 들어 검색된 데이터는 분명히 이름과 그의 역할을 포함하는 배열입니다. 이제 배열의 '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' Studio와 연관된 유일한 메소드는'getClass()'입니다. – Baahubali

+0

오브젝트는 제네릭 유형입니다. 위치가 무엇인지 중요합니다. 일단 당신이 그것을 클릭하면 바로 클릭 한 위치가 무엇인지 압니까? 해당 목록 항목에서 텍스트보기의 값을 가져 오려면 Object를 사용할 필요가 없으므로 원하는 것을 사용하십시오. TextView tv = list.getItemAtPosition (position); 문자열로 가져올 수 있습니다.당신은 그걸 얻었습니까 –

+0

listView 항목과 관련된 텍스트가 올바르게 표시됩니다. 나는 실제로 검색된 데이터의 하위 부분을 원한다. 예를 들어 검색된 데이터는 분명히 이름과 그의 역할을 포함하는 배열입니다. 이제 배열의 'role'요소를 가져 오려고합니다. 데이터가 배열로 검색되기 때문에 커서에서 검색 한 것은 커서를 사용하여 여러 요소를 검색 할 수 있다는 것입니다. 너 지금 날 잡았 으면 좋겠다. – Baahubali

관련 문제