2016-02-25 3 views
0

Как отменить выбор всех остальных дочерних видов, которые были выбраны? Я пытаюсь поддерживать только одного ребенка, выделенного в любой момент времени. В приведенном ниже коде я могу выделить ребенка, но любой другой ребенок, который я выбираю внутри этой группы, будет выделен. Кроме того, если я выберу один дочерний элемент и группу переключателей, будет выделен следующий дочерний элемент группы в той же позиции.ExpandableListView - Как выделить только один дочерний элемент группы?

//CHILD CLICK LISTENER 
lstRoute.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
    @Override 
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 

     for(int i = 0; i < parent.getChildCount(); i++) 
     { 
      View child = parent.getChildAt(i); 
      if(child instanceof ViewGroup) 
      { 
       //DO NOTHING 
      }else 
      { 
       child.setBackgroundColor(Color.TRANSPARENT); 
      } 
     } 
     v.setBackgroundColor(Color.GREEN); 
     return true; 
    } 
}); 

//GROUP EXPANDED 
lstRoute.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
    @Override 
    public void onGroupExpand(int groupPosition) { 

     //Only allow one group to be expanded at a time 
     if (lastExpandedPosition != -1 && groupPosition != lastExpandedPosition) { 
      lstRoute.collapseGroup(lastExpandedPosition); 
     } 
     lastExpandedPosition = groupPosition; 

     //Clear all selections 
     for(int i = 0; i < lstRoute.getChildCount(); i++) 
     { 
      View child = lstRoute.getChildAt(i); 
      if(child instanceof ViewGroup) { 
       child.setBackgroundColor(Color.argb(100,139,213,252)); //Light Blue 
      }else{ 
       child.setBackgroundColor(Color.TRANSPARENT); 
      } 
     } 
    } 
}); 

ответ

1

ListView s утилизация виды. Это означает, что если представление скрывается в одной группе, оно будет использоваться во вновь открытой группе.

Вообще говоря: выделение выделения в ListView s не должно быть выполнено в ClickListener с, но в обычном Adapter.

+0

Спасибо за головы, он указал мне в правильном направлении, но вы можете привести пример того, как это будет работать на пользовательском представлении? – Dayan

+1

https://github.com/F43nd1r/Multitool/blob/master/app/src/main/java/com/faendir/lightning_launcher/multitool/scriptmanager/ScriptListAdapter.java, в то время как это мультиселемент, который также позволяет выбирать группы, он должен показать принцип. (код от меня) – F43nd1r

+0

Хороший материал, спасибо! – Dayan

Смежные вопросы