Страницы

Поиск по вопросам

четверг, 9 апреля 2020 г.

Отображение ExpandedListView в Fragment

#java #android #android_fragment

                    
При добавлении списка типа ExpandedListView в фрагмент цвет текста элементов этого
списка устанавливается белым и, естественно, на белом фоне список почти не видно:

 

Попробовал добавить этот же список в активити, все отобразилось как надо:



Единственный выход(пока что) - смена цвета бекграунда списка(или лейаута,в котором
находится список). Но все же хотелось бы добиться отображения как на втором скриншоте.
Заранее спасибо!

Код лейаута, в котором находится список:

    
    
    
        
        
    



Код фрагмента:

public class ExercisesFragment extends Fragment{

    ExpandableListView elvMain;
    ExercisesAdapter EA;
    SimpleExpandableListAdapter adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
        final View rootView = inflater.inflate(R.layout.exercises_fragment, container,
false);

        EA = new ExercisesAdapter(getActivity());
        adapter = EA.getAdapter();

        elvMain = (ExpandableListView) rootView.findViewById(R.id.elvMain);

        //elvMain.setBackgroundColor(getResources().getColor(R.color.black));
        elvMain.setAdapter(adapter);

        return rootView;
    }
}


Код ExercisesAdapter:

public class ExercisesAdapter {

    final String ATTR_GROUP_NAME= "groupName";
    final String ATTR_EXERC_NAME= "exerName";


    // названия групп упражнений
    String[] groups = new String[] {"Group 1", "Group 2", "Group 3", "Group 4","Group
5", "Group 6", "Group 7", "Group 8", "Group 9"};

    // названия упражнений
    String[] Group1 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group2 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group3 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group4 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group5 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group6 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group7 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group8 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};
    String[] Group9 = new String[] {"Exercise 1", "Exercise 2", "Exercise 3", "Exercise
4", "Exercise 5"};

    // коллекция для групп
    ArrayList> groupData;

    // коллекция для элементов одной группы
    ArrayList> childDataItem;

    // общая коллекция для коллекций элементов
    ArrayList>> childData;
    // в итоге получится childData = ArrayList

    // список аттрибутов группы или элемента
    Map m;

    Context ctx;

    ExercisesAdapter(Context _ctx) {ctx = _ctx;}

    SimpleExpandableListAdapter adapter;

    SimpleExpandableListAdapter getAdapter() {

        // заполняем коллекцию групп из массива с названиями групп
        groupData = new ArrayList>();
        for (String group : groups) {
            // заполняем список аттрибутов для каждой группы
            m = new HashMap();
            m.put(ATTR_GROUP_NAME, group); // имя группы
            groupData.add(m);
        }

        // список атрибутов групп для чтения
        String groupFrom[] = new String[] {ATTR_GROUP_NAME};
        // список ID view-элементов, в которые будет помещены аттрибуты групп
        int groupTo[] = new int[] {android.R.id.text1};

        // создаем коллекцию для коллекций элементов
        childData = new ArrayList>>();

        add(childData, Group1);
        add(childData, Group2);
        add(childData, Group3);
        add(childData, Group4);
        add(childData, Group5);
        add(childData, Group6);
        add(childData, Group7);
        add(childData, Group8);
        add(childData, Group9);

        // список аттрибутов элементов для чтения
        String childFrom[] = new String[] {ATTR_EXERC_NAME};
        // список ID view-элементов, в которые будет помещены аттрибуты элементов
        int childTo[] = new int[] {android.R.id.text1};

        adapter = new SimpleExpandableListAdapter(
                ctx,
                groupData,
                android.R.layout.simple_expandable_list_item_1,
                groupFrom,
                groupTo,
                childData,
                android.R.layout.simple_list_item_1,
                childFrom,
                childTo);

        return adapter;
    }

    public ArrayList>> add(ArrayList>> childData, String[] Group ){

        // создаем коллекцию элементов для первой группы
        childDataItem = new ArrayList>();
        // заполняем список аттрибутов для каждого элемента
        for (String exercise : Group) {
            m = new HashMap();
            m.put(ATTR_EXERC_NAME, exercise); // название упражнения
            childDataItem.add(m);
        }
        // добавляем в коллекцию коллекций
        childData.add(childDataItem);

        return childData;
    }
}

    


Ответы

Ответ 1



Задайте стиль для эелементов списка. У вас видимо textColorPrimary задан белым, вот и элементы списка с белым текстом. Как задать - стоит уже погуглить. По-другому вы не научитесь решать подобные проблемы

Ответ 2



Цвет текста по всей видимости наследуется от стиля, который у Вас определен в styles.xml Как вариант решения могу посоветовать указать в адаптере свою разметку adapter = new SimpleExpandableListAdapter( ctx, groupData, R.layout.my_expandable_list_item_1, groupFrom, groupTo, childData, R.layout.my_list_item_1, childFrom, childTo); А в ней уже менять все что душе угодно.

Ответ 3



У меня при добавлении ExpandedListView в Активити экстендс эктионБар, тоже цвет шрифта начинал сливатся с белым фоном, просто сменил разметку как советует ermak0ff Добавил my_expandable_list_item_1 и my_list_item_1 в папку layout, Там очень внимательным надо быть, во первых разметка как то не хотела через ctrl-v ctrl-c вставать, пришлось потихоньку со встреной разметки android.R.layout.simple_expandable_list_item_1 брать вьюшку и строить свои и как то все встало. Во вторых все ссылки правильно задать android.R.layout менять на R.layout там в коде эти ссылки не единыжды встречаются. В общем разметка заработала, цвет шрифта поменял.

Комментариев нет:

Отправить комментарий