BaseExpandableListAdapter - отключить onclick для групповых элементов без детей - PullRequest
2 голосов
/ 10 марта 2011

Я работаю над реализацией ExpandableListAdapter.

Вариант использования:

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

Есть ли способ отключить / выделить серым расширяемую кнопку, чтобы указать пользователю, что она не имеет дочерних элементов?

На данный момент я реализовал:

public void onGroupExpanded(int groupPosition) {
    if (!containsChildren(groupPosition)) {
        Toast.makeText(context, context.getString(R.string.err_no_children), Toast.LENGTH_LONG).show();
    }
}

Я предпочел бы иметь визуальный элемент, как упомянуто выше (отключить / затенить расширяемую кнопку), и чтобы этот тост отображался, если он щелкнул по нему. Потому что в тот момент, когда вы можете щелкнуть по groupItem, он пытается просто развернуть ноль элементов, что выглядит глупо? Или это стандартное поведение MMI [1] по умолчанию?

[1] http://en.wikipedia.org/wiki/Man-machine_interface

Ответы [ 2 ]

0 голосов
/ 18 марта 2013

Есть другой способ сделать это, установив onGroupClickListener и вернув true для групп, у которых нет дочерних элементов.

myExpandableList.setOnGroupClickListener(new OnGroupClickListener(){

            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id){
                // TODO Auto-generated method stub.
                if(!myAdapter.containsChildren(groupPosition)){
                    return true;
                }else{
                    return false;                   
                }
            }});
0 голосов
/ 21 марта 2011

Я прибег к отключению групповых индикаторов, используя (в ExpandableListActivity, сделайте это вручную в своем списке, если у вас есть обычная активность):

getExpandableListView().setGroupIndicator(null);

Затем в вашем getGroupView() методечто вы реализуете проверку, чтобы увидеть, есть ли у группы, для которой вы собираетесь сделать представление, дочерние элементы (я использую список списков для себя, так что это довольно просто) и соответствующим образом стилизовать представление группы (сделайте вашу собственную кнопку расширения).может быть).Возможно, вам придется поэкспериментировать с родительскими настройками и настройками convertView, чтобы увидеть, что лучше для вас работает.

    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {

        convertView = inflater.inflate(
                android.R.layout.simple_expandable_list_item_1, parent,
                false);

        if (groups.get(groupPosition).getMuscles().size() == 0) {
            convertView.setEnabled(false); //Greys out group name
        } 
...