113

ExpandableListView、子のないグループのグループ インジケータを非表示にする方法はありますか?

4

14 に答える 14

118

これを試してください>>>

すべてのアイテムに

 getExpandableListView().setGroupIndicator(null);

XMLで

android:groupIndicator="@null"
于 2012-08-07T12:42:14.823 に答える
88

この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 で groupindicator を設定できます。

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

これが機能することをテストしました。

于 2010-12-30T12:18:46.857 に答える
43

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 メソッドを使用すると、ワンライナーですべてを完了できます。アダプターに 3 つの Integer 配列は必要ありません。展開状態と折りたたみ状態の XML セレクターも必要ありません。すべてJava経由で行われます。

さらに、このアプローチは、グループがデフォルトで展開されたときに、ブログのコードでは機能しない正しいインジケーターも表示します。

于 2012-07-10T15:29:51.693 に答える
26

別の回答で述べたように、Android は展開されていないリスト グループを空として扱うため、グループに子が含まれていてもアイコンは描画されません。

このリンクは私の問題を解決しました: http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html

基本的に、デフォルトのドローアブルを透明に設定し、ドローアブルを ImageView としてグループ ビューに移動し、アダプターで画像を切り替える必要があります。

于 2011-08-26T15:38:11.670 に答える
12

コードでは、グループ リストにカスタム 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

于 2014-03-20T09:47:27.367 に答える
8

これは XML とは別の方法である可能性があります。android:groupIndicator="@null"

参照リンク: https://stackoverflow.com/a/5853520/2624806

于 2014-12-20T09:36:49.590 に答える
4

私の解決策を提案してください:

1) デフォルトの groupIndicator をクリアします。

<ExpandableListView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"       
    android:layout_width="wrap_content"
    android:layout_height="240dp"        
    android:layout_gravity="start"
    android:background="#cccc"  
    android:groupIndicator="@android:color/transparent"     
    android:choiceMode="singleChoice"
    android:divider="@android:color/transparent"        
    android:dividerHeight="0dp"  
     />

2) ExpandableAdapter で:

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = new TextView(context);
    }
    ((TextView) convertView).setText(groupItem.get(groupPosition));     
    ((TextView) convertView).setHeight(groupHeight);
    ((TextView) convertView).setTextSize(groupTextSize);

    //create groupIndicator using TextView drawable
    if (getChildrenCount(groupPosition)>0) {
        Drawable zzz ;
        if (isExpanded) {
            zzz = context.getResources().getDrawable(R.drawable.arrowup);
        } else {
            zzz = context.getResources().getDrawable(R.drawable.arrowdown);
        }                               
        zzz.setBounds(0, 0, groupHeight, groupHeight);
        ((TextView) convertView).setCompoundDrawables(null, null,zzz, null);
    }       
    convertView.setTag(groupItem.get(groupPosition));       

    return convertView;
}
于 2014-10-03T12:23:24.107 に答える
1

これを使用すると、私にとっては完全に機能します。

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/group_indicator_expanded" android:state_empty="false" android:state_expanded="true"/>
<item android:drawable="@drawable/group_indicator" android:state_empty="true"/>
<item android:drawable="@drawable/group_indicator"/>

</selector>
于 2013-10-24T11:27:59.250 に答える
1

ExpandableListViewの属性を変更しようとしましたandroid:groupIndicator="@null"か?

于 2015-06-12T15:25:11.113 に答える
-3

convertView.setVisibility(View.GONE) でうまくいくはずです。

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
    DistanceHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.list_search_distance_header, parent, false);
        if (getChildrenCount(groupPosition)==0) {
            convertView.setVisibility(View.GONE);
        }
于 2015-12-12T15:02:54.553 に答える