2014-10-02 3 views
0

TabHost에 포함 된 조각의 목록보기에서 CAB 및 longPressed (선택한) 행의 강조 표시를 구현했습니다. api> 8을 지원합니다.Android : onItemLongClick의 뷰 배경 수정

api 8에서는 목록 항목을 길게 누르면 가끔 잘못된 목록이 강조 표시되는 것을보고 있습니다. 얼마나 많은 행이 목록에 표시되는지에 따라 강조 표시가 작동하는지 여부가 결정됩니다. 배경색 변경을 수행하는 메서드가 전달 된 뷰를 사용하고 position 매개 변수가 실제로 올바르므로 매우 어려운 일입니다.

이 버그는 무엇입니까? 아니면 누락 되었습니까?

listView.setAdapter(
      new myAdapter(
        inflater, 
        tvSeason) 
    ); 
    listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      if (mActionMode != null) { 
       dismissActionMode(); 
       return false; 
      } 
      // Start the CAB using the ActionMode.Callback defined above 
      mActionMode = getSherlockActivity().startActionMode(mActionModeCallback); 
      view.setSelected(true); 

      selectedTvEpisode = (TvEpisode)listView.getAdapter().getItem(position); 
      mActionMode.setTitle(MyApp.getResourceString(R.string.tv_episode_number, selectedTvEpisode.getNumber())); 

    view.setBackgroundColor(getActivity().getResources().getColor(R.color.lime)); 
      selectedView = view; 
      return true; 
     } 
    }); 

답변

1

주의 깊게보기 배경색을 설정하지 마십시오! 기억하십시오 : ListView의보기가 재활용됩니다. 데이터 항목을 가져 와서 선택된 플래그를 설정 한 다음 AdapternotifyDataSetChanged()을 호출하면됩니다. Adapter.getView()에 선택한 플래그에 따라 배경을 설정하십시오.

+0

네, 저는 재활용에 대해 알고 있습니다. 그러나보기가 보이고 사용자가 그것을 보았을 때 재활용되지 않을 것이라고 생각했습니다 ... – JohnRock

+0

아니요,하지만 올바른 접근 방식은 여전히 ​​선택된/데이터면에서 선택을 해제하고 어댑터가 배경 차를 가져 가게합니다. 나는 이것이 당신의 문제를 해결할 것이라고 확신합니다. – SimonSays

+0

나는 당신의 제안 된 접근 방식을 시도했는데, 나는 그것이 올바른 방법임을 동의합니다. 그러나 같은 문제. API 8에서 테스트 하이라이트 된 뷰가 1 또는 2 행만큼 떨어져 있음 – JohnRock