В ExpandableListView
есть ли способ скрыть индикатор группы для групп без детей?ExpandableListView - скрыть индикатор для групп без детей
ответ
Свойство android:groupIndicator
имеет доступное состояние. То есть вы можете установить другое изображение для разных состояний.
Когда группа не имеет детей, то соответствующее состояние «state_empty»
Смотрите эти ссылки ссылки:
Для state_empty
, вы можете установить другое изображение, которое не является путают или просто используют прозрачный цвет, чтобы ничего не показывать ...
Добавить этот элемент в свою форму с выделением вместе с другими ....
<item android:state_empty="true" android:drawable="@android:color/transparent"/>
Таким образом, ваш statelist может быть так:
<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, вы можете установить groupindicator в OnCreate следующим образом:
getExpandableListView().setGroupIndicator(getResources().getDrawable(R.drawable.my_group_statelist));
У меня есть испытал это, чтобы работать.
Не работает: протестирован в Android 4.0.2 (ICS). Другие ответы на этот вопрос на этой странице. Похоже, что Android считает нерасширенную группу пустой. Просто установите индикатор группы прозрачным, затем добавьте imageView в свою группу и в метод getGroupView адаптера, установите его в нужную вам иконку. – Fraggle
@Fraggle: Когда я тестировал 2.2, он сработал. –
не работает для меня ни на 2.2 – morgwai
Как уже упоминалось в другом ответе, поскольку Android рассматривает группу без расширенного списка как пустую, значок не рисуется, даже если в группе есть дочерние элементы.
Этой ссылка решена проблема для меня: http://mylifewithandroid.blogspot.com/2011/06/hiding-group-indicator-for-empty-groups.html
В принципе вы должны установить вытяжку по умолчанию прозрачных, переместите вытяжку в вашу точке зрения группы как ImageView и переключить изображение в адаптере.
На основании ответа 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 вы получите все это делается с одной гильзой. Вам не нужны три массива Integer в вашем адаптере. Вам также не нужен селектор XML для состояния, расширенного и свернутого. Все делается через Java.
Плюс, этот подход также отображает правильный индикатор, когда группа по умолчанию расширена, что не работает с кодом из блога.
Где я могу применить этот код? – Karthik
Это предназначено для использования в методе 'getGroupView()' вашей реализации BaseExpandableListAdapter'. Взгляните на эту [примерную реализацию] (http://mylifewithandroid.blogspot.co.uk/2011/06/hiding-group-indicator-for-empty-groups.html). – jenzz
+1 для ответа на ур @ Jeans Я уже прошел через эту ссылку thnx ... – Karthik
Попробуйте >>>
для всех элементов
getExpandableListView().setGroupIndicator(null);
В XML
android:groupIndicator="@null"
Я считаю, что это установит идентификатор groupIndicator для всех элементов, а не только для тех, у кого нет детей. – ericosg
Протестировано и не работает. У этого простого скрыть все индикаторы есть дети или нет. – frusso
** myExpandableListView.setGroupIndicator (null); ** работает для меня –
Используйте это он отлично работает для меня.
<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? Это не работает для меня (group_indicator появляется для групп с детьми и без них). –
Я видел этот код много раз и не работаю. – Joseph
В коде просто использовать пользовательские XML для списка групп и в том, что поставить ImageView для GroupIndicator.
И добавить ниже массивов в вашем 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
предложить вам мое решение:
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;
}
Просто необходимо создать новую структуру XML с высоты = 0 для скрытый заголовок группы. Например, это 'group_list_item_empty.xml'
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0dp">
</RelativeLayout>
Тогда ваш нормальный макет заголовка группа 'your_group_list_item_file.xml'
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="48dp"
android:orientation="horizontal">
...your xml layout define...
</LinearLayout>
Наконец, вы просто обновить метод getGroupView в своем классе адаптер:
public class MyExpandableListAdapter extends BaseExpandableListAdapter{
//Your code here ...
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup viewGroup) {
if (Your condition to hide the group header){
if (convertView == null || convertView instanceof LinearLayout) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.group_list_item_empty, null);
}
return convertView;
}else{
if (convertView == null || convertView instanceof RelativeLayout) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.your_group_list_item_file, null);
}
//Your code here ...
return convertView;
}
}
}
ВАЖНО: корневой тег файлов макета (скрытый и нормальный) м усть быть разными (как, например, выше, LinearLayout и RelativeLayout)
это может быть другой путь из XML, установите android:groupIndicator="@null"
Ссылка Ссылка: https://stackoverflow.com/a/5853520/2624806
Вы пытались изменить ExpandableListView
как атрибут android:groupIndicator="@null"
?
не для всех групп. – Ich
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);
}
Это просто удаляет все элементы: Список пуст -> мне грустно :( – Ich
Вы добавили счетчик проверки? If (getChildrenCount (groupPosition) == 0) { –
Просто хотел улучшить ответ Михира Триведи. Вы можете поместить это в getGroupView(), который находится внутри MyExpandableListAdapter класса
View ind = convertView.findViewById(R.id.group_indicator);
View ind2 = convertView.findViewById(R.id.group_indicator2);
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);
/*toggles down button to change upwards when list has expanded*/
if(stateSetIndex == 1){
ind.setVisibility(View.INVISIBLE);
ind2.setVisibility(View.VISIBLE);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
else if(stateSetIndex == 0){
ind.setVisibility(View.VISIBLE);
ind2.setVisibility(View.INVISIBLE);
Drawable drawable = indicator.getDrawable();
drawable.setState(GROUP_STATE_SETS[stateSetIndex]);
}
}
}
... и, как и для макета, это как мой group_items.xml, кажется,
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/group_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="20dp"
android:paddingTop="16dp"
android:paddingBottom="16dp"
android:textSize="15sp"
android:textStyle="bold"/>
<ImageView
android:id="@+id/group_indicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/arrow_down_float"
android:layout_alignParentRight="true"
android:paddingRight="20dp"
android:paddingTop="20dp"/>
<ImageView
android:id="@+id/group_indicator2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/arrow_up_float"
android:layout_alignParentRight="true"
android:visibility="gone"
android:paddingRight="20dp"
android:paddingTop="20dp"/>
Надеюсь, что поможет ... не забудьте оставить верхний план
- 1. ExpandableListView показывает индикатор для групп без ребенка
- 2. Android ExpandableListView - обработка родителей без детей
- 3. Скрыть вытягиваемый для расширяемого списка, когда нет детей
- 4. Android ExpandableListView Скрыть группу
- 5. Различные макеты для разных групп ExpandableListView
- 6. Скрыть/показать изображение детей в группе с дочерним кликом Expandablelistview
- 7. Индикатор ExpandableListView не выровнен правильно
- 8. Пользовательский индикатор Expandablelistview не отображается
- 9. Как иметь чередующиеся макеты для детей ExpandableListView
- 10. Индикатор группы Android по умолчанию ExpandableListView
- 11. Android ExpandableListView индикатор/значок всегда растягивается
- 12. Сортировка групп для заказа элементов для детей
- 13. Скрыть кнопку в ExpandableListView
- 14. Скрыть заголовок группы ExpandableListView
- 15. Как скрыть дочерние элементы для определенной группы в ExpandableListView?
- 16. Пользовательский индикатор на ExpandableListView Только последний меняется
- 17. Динамически настраивать высоту заголовков групп в ExpandableListView
- 18. Наденьте справа индикатор на ExpandableListView в Android
- 19. Как установить значение String для ExpandableListView Текст для детей нажатием?
- 20. Как полностью скрыть идентификатор группы ExpandableListView?
- 21. ExpandableListView - пустое сообщение группы
- 22. Изменение ориентации сглаживание детей в ExpandableListView
- 23. CheckBox заявляет, что у детей ExpandableListView
- 24. Скрыть индикатор активности
- 25. Как скрыть индикатор выполнения?
- 26. Индикатор радиолюбителя Android скрыть
- 27. расширяемая Индикатор
- 28. Как обрабатывать рециркуляцию в Expandablelistview с различными макетами для детей?
- 29. Как добавить громкость, переключатель и флажок для детей в ExpandableListView?
- 30. CRM: Получить детей исключение для детей без детей
Чтобы уточнить: есть ли способ скрыть индикатор группы ТОЛЬКО для групп без детей? – AlleyOOP