2011-05-11 6 views
0

Android에 익숙하지 않아서 기본적인 질문 인 것 같습니다. 하지만 내가 가진 것은 매우 단순한 클래스 인 SingleItem입니다.이 클래스에는 정수와 문자열 그리고 각각에 대한 getter와 setter가 있습니다. 내 응용 프로그램에서는 SingleItem 개체의 컬렉션을 보유하고있는 ArrayList가 있습니다. 또한 ListView 위젯을 사용하는 레이아웃이 있습니다.간단한 Android ListView 문제에 대한 도움말

내가하려고하는 것은 ListView를 SingleItem의 String 값으로 채우는 것이지만 사용자가 ListView에서 항목을 선택하면 해당 SingleItem 값에서 정수 ID가 필요합니다. Android 개발에서 어떻게해야합니까?

답변

1

자신의 어댑터를 사용하여 목록을 채우는 경우 반환 할보기를 작성할 때 getView() 함수에서 setTag()을 호출하여 반환 할보기에 호출하고 전체 "SingleItem"개체를 저장할 수 있습니다. 그런 다음 반환 된 뷰의 onClickListener에서 클릭 된 뷰의 getTag() 메서드를 사용하여 정보를 검색 할 수 있습니다. 자신의 어댑터를 만들 :

편집 : 나는 여기

+0

onCLickListener는 전체 목록보기를 선택하기위한 것입니다. 특정 항목에 대한 항목을 반환하려면 OnItemSelectedListener – jkhouw1

+0

oi 나는 downvotes를 사용해야합니다. getView() 함수의 모든 사용자 정의 어댑터에서 1 onClickListener를 사용합니다. 간단히보기의 onClickListener를 설정하고 돌아갑니다. 어댑터의 1 onClickListener(). 이것은 setTag()를 사용하여 객체에 필요한 모든 데이터를 저장할 수 있기 때문에 훌륭합니다. – snctln

0

를 참조하고하는 의사 코드의 무리 인 OnClickListener를 지정 . 이것은 모든 종류의 일을 할 수있는 유연성을 제공하지만, 여기서 중요한 것은 사용자 정의 클래스의 관련 필드 만 표시하고 더 복잡한 목록보기를 작성하는 것입니다. 괜찮은 튜토리얼은 여기에 있습니다 : http://developerlife.com/tutorials/?p=327

당신은 baseadapter의 다른 재 지정을 처리해야하지만 키가 사용자 정의 어댑터를 정의한 후 singleItem.getString()

public class SingleItemAdapter extends BaseAdapter{ 
    private ArrayList<SingleItem> m_items= new ArrayList<SingleItem>(); 
      private Context mContext; 
      public SingleItemAdapter (Context c,ArrayList<SingleItem> items) { 
     mContext = c; 
     m_items= items; 
    } 
. 
. 
. 

    @Override 
    public Object getItem(int arg0) { 
     return m_items.get(arg0); 
    } 

      @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

      View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) mContext 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.singleitemview, null); 
     } 
      SingleItem i=(SingleItem) getITem(position) 
      if(v!=null){ 
       TextView tv=(TextView) v.findViewById(R.id.yourListItemView); 
       tv.setText(i.getStringValue()); 
} 

} 
} 

의 값을 할당되어, 당신은 다음 수 이것을 listview에 할당하고 OnItemSelectedListener에 리스너를 지정하십시오. 이렇게하면 위치가 반환되므로 ArrayItem의 ArrayItem에있는 위치로 다시 묶을 수 있습니다.

. 
. 
. 
SingleItemAdapter sia=new SingleItemAdapter(this,yourArray); 
yourArrayList.setAdapter(sia); 
yourArrayList.setOnItemSelectedListener(new OnItemSelectedListener() { 
@Override 
    public void onItemSelected(AdapterView<?> parent, View v, int position, long row) { 
      SingleItem si= yourArray.getItem(position); 
      //do something with si.getValue(); 

} 

. 
. 
. 

}); 
+0

작업 코드 조각을주는 것은 사람들이 jk를 배우는 방법이 아닙니다. 적절한 방법은 몇 가지 설명과 일부 코드 조각을 제공해야하지만 누구나 예제를 찾을 수 있습니다. 단 몇 명만 선택하면 이해할 수 있습니다. 프로그래머가 프로그래머에게 그들이 사용하는 것을 적용하고 컨텍스트를 제공하는 방법을 배우게됩니다. 절대로 복사 및 붙여 넣기 프로그래머가 아닙니다. 프로그래머로서 당신을 파괴 할 것입니다. 항상 질문하고, 그것이 무엇인지를 생각하지 마십시오. 그것을 이해하다. – JoxTraex

+0

좋은 지적. 나는 이것이 너무 복잡하고 올바른 방향으로 그를 가리킬 것이라고 생각하지 않았다. 좀 더 많은 색으로 게시물을 수정하겠습니다. – jkhouw1

+0

감사의 뜻은 솔루션 센터가 아니라 학습/문제 해결 환경입니다. – JoxTraex