[android] ExpandableListView-자식이없는 그룹에 대한 표시기 숨기기

에서 ExpandableListView하위가없는 그룹에 대해 그룹 표시기를 숨기는 방법이 있습니까?



답변

이것을보십시오 >>>

모든 항목

 getExpandableListView().setGroupIndicator(null);

XML에서

android:groupIndicator="@null"


답변

android:groupIndicator속성은 상태를 사용할 수 당김을합니다. 즉, 상태마다 다른 이미지를 설정할 수 있습니다.

그룹에 자식이없는 경우 해당 상태는 ‘state_empty’입니다.

다음 참조 링크를 참조하십시오.

이것이것

의 경우 state_empty혼란스럽지 않은 다른 이미지를 설정하거나 단순히 투명한 색상을 사용하여 아무것도 표시하지 않을 수 있습니다.

이 항목을 다른 항목과 함께 상태 저장 드로어 블에 추가하십시오 ….

<item android:state_empty="true" android:drawable="@android:color/transparent"/>

따라서 상태 목록은 다음과 같을 수 있습니다.

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_empty="true" android:drawable="@android:color/transparent"/>
    <item android:state_expanded="true" android:drawable="@drawable/my_icon_max" />
    <item android:drawable="@drawable/my_icon_min" />
</selector>

ExpandableListActivity를 사용하는 경우 다음과 같이 onCreate에서 그룹 표시기를 설정할 수 있습니다.

getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));

나는 이것이 작동하는지 테스트했습니다.


답변

StrayPointer의 답변과 블로그의 코드를 기반으로 코드를 훨씬 더 단순화 할 수 있습니다.

XML에서 ExpandableListView에 다음을 추가하십시오.

android:groupIndicator="@android:color/transparent"

그런 다음 어댑터에서 다음을 수행합니다.

@Override
protected void bindGroupView(View view, Context paramContext, Cursor cursor, boolean paramBoolean){
    **...**

    if ( getChildrenCount( groupPosition ) == 0 ) {
       indicator.setVisibility( View.INVISIBLE );
    } else {
       indicator.setVisibility( View.VISIBLE );
       indicator.setImageResource( isExpanded ? R.drawable.list_group_expanded : R.drawable.list_group_closed );
    }
}

setImageResource 메소드를 사용하면 한 줄로 모든 작업을 수행 할 수 있습니다. 어댑터에 세 개의 정수 배열이 필요하지 않습니다. 확장 및 축소 상태에 대한 XML 선택기도 필요하지 않습니다. 모두 Java를 통해 수행됩니다.

또한이 접근 방식은 블로그의 코드에서 작동하지 않는 그룹이 기본적으로 확장 될 때 올바른 표시기를 표시합니다.


답변

다른 답변에서 언급했듯이 Android는 확장되지 않은 목록 그룹을 빈 것으로 취급하므로 그룹에 자식이 있어도 아이콘이 그려지지 않습니다.

이 링크는 나를 위해 문제를 해결했습니다.
http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html

기본적으로 기본 드로어 블을 투명으로 설정하고 드로어 블을 그룹보기로 ImageView로 이동 한 다음 어댑터에서 이미지를 토글해야합니다.


답변

코드에서 그룹 목록에 대한 사용자 지정 xml을 사용하고 GroupIndicator 에 대한 ImageView 를 넣으십시오 .

그리고 ExpandableListAdapter에 아래 배열을 추가하십시오.

private static final int[] EMPTY_STATE_SET = {};
private static final int[] GROUP_EXPANDED_STATE_SET = { android.R.attr.state_expanded };
private static final int[][] GROUP_STATE_SETS = { EMPTY_STATE_SET, // 0
GROUP_EXPANDED_STATE_SET // 1
};

또한 ExpandableListAdapter의 메서드 에서 아래와 같은 것을 추가하십시오.

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
{
    if (convertView == null)
    {
        LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.row_group_list, null);
    }

    //Image view which you put in row_group_list.xml
    View ind = convertView.findViewById(R.id.iv_navigation);
    if (ind != null)
    {
        ImageView indicator = (ImageView) ind;
        if (getChildrenCount(groupPosition) == 0)
        {
            indicator.setVisibility(View.INVISIBLE);
        }
        else
        {
            indicator.setVisibility(View.VISIBLE);
            int stateSetIndex = (isExpanded ? 1 : 0);
            Drawable drawable = indicator.getDrawable();
            drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
        }
    }

    return convertView;
}

참조 :
http://mylifewithandroid.blogspot.in/2011/06/hiding-group-indicator-for-empty-groups.html


답변

XML에서

android:groupIndicator="@null"

에서 ExpandableListAdapter-> getGroupView다음 코드 복사

if (this.mListDataChild.get(this.mListDataHeader.get(groupPosition)).size() > 0){
      if (isExpanded) {
          arrowicon.setImageResource(R.drawable.group_up);
      } else {
          arrowicon.setImageResource(R.drawable.group_down);
      }
}


답변

이것은 XML의 또 다른 방법 일 수 있습니다. android:groupIndicator="@null"

참조 링크 : https://stackoverflow.com/a/5853520/2624806