でExpandableListView
、子のないグループのグループ インジケータを非表示にする方法はありますか?
14 に答える
これを試してください>>>
すべてのアイテムに
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 で groupindicator を設定できます。
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 メソッドを使用すると、ワンライナーですべてを完了できます。アダプターに 3 つの Integer 配列は必要ありません。展開状態と折りたたみ状態の 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"
私の解決策を提案してください:
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;
}
これを使用すると、私にとっては完全に機能します。
<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>
ExpandableListView
の属性を変更しようとしましたandroid:groupIndicator="@null"
か?
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);
}