2011-11-24 4 views
0

이 질문은이 웹 사이트에서 이전에 묻지 만 솔직히 말해서 필자가 본 솔루션의 결과가 없었습니다. 예를 들어,이 게시물 : highlighting the selected item in the listview in android은 ListView에 choiceMode를 설정하기 만하면됩니다. 나는 이것을 시도하고 전혀 작동하지 않습니다.ListView의 강조 표시 항목

내 코드에는 ListView (onListItemClick)에 대한 수신기가 있으며 트리거 될 때마다 ... getListView().setItemChecked(position, true)과 그 위에 내가 첨부 한 XML 선택기가 있습니다. 목록보기 ...

<ListView      
    android:id="@id/android:list" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:scrollbars="none" 
    android:layout_weight="1.5" 
    android:choiceMode="singleChoice" 
    android:listSelector="@drawable/bounty_list_selector"/> 

내가 여기에 뭔가를 찾을 수 있습니까? setItemChecked()은 ListView의 선택기에 영향을 미치지 않습니까?

+0

행을 클릭 할 때 선택기 그래픽을 표시하려고합니까? (행 안의 뭔가가 onClickListener를 가지고 있다면) – FunkTheMonk

+1

android : listSelector는 목록 선택 (dpad를 사용하여 목록에서 이동)을 처리하는 것으로 생각합니다. 체크 된 행에는 영향을 미치지 않습니다. – aromero

+0

@FunkTheMonk, 목록에있는 항목을 "강조 표시"하거나 기본적으로 배경색을 변경하려고 시도하지만, 한 번에 하나의 항목 만 "선택"해야합니다. –

답변

0

비슷한 문제가있어 코드를 통해 해결했습니다. 그것은 가장 밝고 효율적인 솔루션은 아니지만 ListView 드로잉 문제를 해결하고 지금까지 제대로 작동하는 것 같습니다.

활동 파일 :

private ListView listView; 
private View selectedView; 
private int selectedPosition; 
private MyAdapter arrayAdapter; 

... 
// set a state machine for when a list item is clicked 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      if (selectedPosition == -1) { 
       // no item is selected, mark as selected 
       selectedView = view; 
       view.setBackgroundResource(R.drawable.bg_selected); 
       selectedPosition = position; 
      } else if (selectedPosition == position) { 
       // the same item is selected as the previous one, deselect 
       selectedView = null; 
       view.setBackgroundResource(R.drawable.bg_unselected); 
       selectedPosition = -1; 
      } else { 
       // another item is selected, deselect the previous and select the new one 
       selectedView.setBackgroundResource(R.drawable.bg_unselected); 
       selectedView = view; 
       view.setBackgroundResource(R.drawable.bg_selected); 
       selectedPosition = position; 
      } 

      arrayAdapter.setSelectedPosition(selectedPosition); 
     } 
    }); 

어댑터 코드 :

public class MyAdapter extends ArrayAdapter<MyObject> { 
    private int selectedPosition; 

    private static class ViewHolder { 
     RelativeLayout layout; 
     ... 
    } 

    public void setSelectedPosition(int selectedPosition) { 
     this.selectedPosition = selectedPosition; 
    } 

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

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.list_row, null); 
      holder = new ViewHolder(); 
      holder.layout = (RelativeLayout) convertView.findViewById(R.id.rl_item); 
      ... 

      convertView.setTag(holder); 
     } 
     else 
      holder = (ViewHolder) convertView.getTag(); 

     ... 
     if (position == selectedPosition) 
      holder.layout.setBackgroundResource(R.drawable.bg_selected); 
     else 
      holder.layout.setBackgroundResource(R.drawable.bg_unselected); 
     ... 

     return convertView; 
    } 

    ... 
} 

는 희망이 도움이!

관련 문제