2010-03-08 5 views
0

나는 안드로이드 SDK를 처음부터 익히고있다. 그리고 나는 빠른 질문을했다. ListView 왼쪽 및 각 행에 대해 텍스트 약간의 색 사각형을 설정하려면 노력하고있어. 또한 목록에있는 각 항목을 클릭하고 연락처 목록과 비슷한 정보를 표시하는 새로운 활동을 열 수 있도록 목록을 만들고 싶습니다. 누구든지 나를 도울 수있는 모범이 있습니까?Android에서 ListView를 사용 하시겠습니까?

답변

1

BaseAdapter를 서브 클래 싱하지 않아도되지만 사용자 정의 항목보기 및 객체를 기반으로하는 사용자 정의 항목 클릭 논리로 작업하려는 경우 여기에 대한 설명을 참조하십시오.

내 코드에서 일부 모델 개체의 컬렉션을 사용하고 있습니다. 이 모델 개체 컬렉션을 ListView에 표시하려고합니다. KeyValue 쌍의 목록 (예 : List<Map<String, Object>>)을 기대하기 때문에 ModelAdapter의 ArrayList를 SimpleAdapter에 전달할 수 없습니다. 그래서, 내 응용 프로그램 내에서 내 개체의 간단한 컬렉션을 사용하는 대신, 내가 사용했던 구조에서 단순히 파생 내 컬렉션을 나타내는 사용자 정의 클래스를 만들었습니다. 이렇게하면 코드를 그대로 사용할 수 있지만 코드 친화적 컬렉션에서 SimpleAdapter 친숙한 컬렉션으로 변환하는 메서드를 추가 할 수 있습니다. 내 경우에는 일부 문자열 속성 (예 : HashMap<String, ModelObject>)에 의해 키잉 된 HashMap을 사용하고있었습니다. 내 맞춤 컬렉션 클래스는 ModelObjects (복수형)은 HashMap<String, ModelObject>입니다. ModelObjects 그러면 내 개체를 ArrayList<? extends HashMap<String, ?>>으로 변환 한 후 SimpleAdapter 생성자에 전달하여 사용자 지정보기가있는 목록에 표시 할 수있는 ToList() 메서드가 포함됩니다. 그래서

지금은 다음과 같은 5 개 개의 매개 변수와 SimpleAdapter를 구성 할 수 있습니다

  1. 내 목록의 컨텍스트 (전술) (내 경우에는, 포함하는 활동)
  2. 내 목록을
  3. 이 항목에 대한 사용자 정의 레이아웃의 ID (R.layout.custom_list_item)
  4. 속성 이름의 문자열 배열입니다. 이들은 My ToList 메소드의 HashMap에있는 키입니다. 내 OnItemClickListener.onItemClick 방법에서,

그런 다음 내 사용자 지정 레이아웃 뷰에서 파생 된 요소 ID에 상기 (4 #)의 각 항목의 속성을 매핑

  • int 배열, 나는에서 arg3을 사용할 수 있습니다 내 목록에서 클릭 한 항목의 위치를 ​​가져 와서 내 모음에서 개체를 선택합니다. 당신은 당신의 물건의 어떤 물건에 대해서도 행동을 취할 수 있습니다. 또는 물건의 일부 속성에 큰 스위치/케이스를하여 특정한 물건이나 그런 물건을 발사 할 수 있습니다.

    유일한 트릭은 수정되지 않은 활동 내에 콜렉션의 로컬 사본을 저장해야한다는 것입니다. 그렇지 않으면 onItemClick에서 id로 개체를 찾고 예상보다 다른 개체를 얻을 수 있습니다. 문맥에서 조금 벗어날 수 있지만 여기 내 코드는 다음과 같습니다.

    ListView lvArtists = (ListView)findViewById(R.id.lvArtists); 
        SimpleAdapter adapter = new SimpleAdapter(
          this, 
          artists.ToList(), 
          R.layout.artist_list_item, 
          new String[] { "name", "imageIdSmall", "tracksCount", "tracksPending" }, 
          new int[] { R.id.artistListItemName, R.id.artistListItemImage, R.id.artistListItemAudioClips, R.id.artistListItemAudioClipsPending } 
          ); 
        lvArtists.setAdapter(adapter); 
        lvArtists.setOnItemClickListener(new OnItemClickListener() { 
    
         @Override 
         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
           long arg3) { 
          Artist artist = artists.getSortedItem((int)arg3); 
          mArtistDialog.setArtist(artist); 
          mArtistDialog.show();    
         } 
        }); 
    
  • 관련 문제