2015-01-26 4 views
0

selector을 사용하여 ListView에서 선택한 행을 강조 표시하려고합니다. 언론을 발표 한 후에도 강조 표시가 필요합니다. 강조 표시된 행을 상징하는 것은 선택된 행입니다.선택기가 단편 내부의 ListView에 대해 작동하지 않습니다.

현재 텍스트의 색상은 기본적으로 변경됩니다. 배경색을 변경해야합니다.

DrawerLayout 안에있는 조각에 ListView이 있습니다. 장치를 선택하면 DrawerLayout이 닫힙니다. DrawerLayout을 다시 열면 선택한 장치의 배경이 변경되지 않습니다. 선택한 장치의 텍스트는 배경색이 아닌 다른 색입니다.

나는 여기에 수많은 제안을 시도했으며 그 효과가 아무것도 발견하지 못했습니다. API-17을 대상으로하고 있으며 minsdk는 API-17입니다.

여기 내가 성공하지 못한 몇 가지 게시물이 있습니다. Android ListView selected item stay highlighted

당신이, 덕분에 더 자세한 내용이 필요하면 알려줘 Change background color of selected item on a ListView

  • ListView Item Selected State not working
    • .

      device_list_fragment.xml 
      <?xml version="1.0" encoding="utf-8"?> 
      <ListView xmlns:android="http://schemas.android.com/apk/res/android" 
          android:id="@+id/device_list_view" 
          android:layout_width="match_parent" 
          android:layout_height="match_parent" 
          android:choiceMode="singleChoice" 
          android:background="@drawable/device_selector" > 
      </ListView> 
      

      device_selector.xml 
      <?xml version="1.0" encoding="utf-8"?> 
      <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
          <item 
           android:state_activated="true" 
           android:drawable="@drawable/device_selected"/> 
          <item 
           android:drawable="@drawable/device_not_selected"/> 
      </selector> 
      

      strings.xml 
      <drawable name="device_selected">#777777</drawable> 
      <drawable name="device_not_selected">#555555</drawable> 
      

      DeviceListFragment 
      public class DeviceListFragment extends Fragment implements OnItemClickListener { 
          public View onCreateView(...) { 
           View view = inflater.inflate(R.layout.device_list_fragment, container, false); 
             this.devicesArrayAdapter = new DevicesArrayAdapter(this.getActivity()); 
      
           this.deviceListView = (ListView) view.findViewById(R.id.device_list_view); 
           this.deviceListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
           this.deviceListView.setAdapter(this.devicesArrayAdapter); 
           this.deviceListView.setOnItemClickListener(this); 
      
           return view; 
          } 
      
          public void onItemClick(...) { 
           this.deviceListView.setItemChecked(position, true); 
          } 
      } 
      

      ,536,913,632 : 여기

      은 (내가 시도한 마지막에) 내 코드입니다 10
      DevicesArrayAdapter 
      public class DevicesArrayAdapter extends ArrayAdapter<Device> { 
          public View getView(...) { 
           View rowView = layoutInflater.inflate(R.layout.device_element, parent, false); 
           return rowView; 
          } 
      } 
      
  • 답변

    1

    어댑터가 문제입니다. - 뷰를 팽창시키고 돌아 오는 것만 가능합니다. 뷰 배경을 다른 색으로 유지하려면 rowView를 변경해야하는지 여부를 나타내는 플래그를 설정해야합니다. 스파 스 배열은이를 수행하는 좋은 방법입니다. 그렇지 않은 경우 에 DevicesArrayAdapter가 표시 될 때마다 기본보기가 표시되고 배경이 변경되지 않습니다. 이 같은

    뭔가 : 당신의 DeviceFragment 변화에

    getView(...) { 
        View rowView = layoutInflater.inflate(R.layout.device_element, parent, false); 
    
        If (arrayViews[position] == CHANGE_BACKGROUND){ 
    
         rowView.setBackground = NEW_COLOR; 
        } 
    
        return rowView; 
    } 
    
    +0

    에 나는 선택의 목적은 기반 뷰의 변경 부분에 도움을 줄 알았는데 어떤 유형의 선택을 했습니까? 선택기를 사용하면 변경 사항이 유지되지 않습니다. – prolink007

    +0

    확인. 나는 이것을했다. 이것이 나를 위해 일하는 유일한 방법은'onItemClick()'메서드에서'myArrayAdapter.notifyDataSetChanged();'를 호출하는 것입니다. 이 올바른지? – prolink007

    +0

    나는이 솔루션과 비슷한 솔루션을 이미 가지고 있기로 결정했다.정확히 내가 기대했던 것이 아니지만 지금은 효과가있을 것입니다. 고마워. – prolink007

    1

    public void onItemClick(...) { 
        this.deviceListView.setItemChecked(position, true); 
    } 
    

    public void onItemClick(AdapterView<?> parent, View view, int position,long arg3) { 
        view.setSelected(true); 
    } 
    
    +0

    나는 이것을 벌써 시도했다, 그것은 작용하지 않았다. 다음은이 답변과 관련된 게시물입니다. http://stackoverflow.com/a/16190228/427763 – prolink007

    +0

    시도해보십시오. device_selector.xml 변경 android : state_activated = "true" 까지 android : state_selected = "true" – ayz4sci

    +0

    나는 그것을 이미 시도했지만 작동하지 않았다. 이전 의견에서 링크 된 게시물을 살펴 본다면 정확한 변경 사항을 볼 수 있습니다. 여전히 하이라이트를 지속하지 못했습니다. – prolink007