OnChildClickListener исчезает

1

У меня есть расширяемое listview, когда я нажимаю строку, в которой он запускает onChildClick или onGroupClick, в зависимости от того, нажимаю ли я ребенка или группу.

Изображение 174551

Если я добавлю что-то кликабельное в файл макета xml (например, CheckBox), onChildClick больше не запускается. (если я добавлю простой textView, он также работает)

Изображение 174551

Кто-нибудь знает почему? Является ли элемент переписыванием слушателя?

Основной код:

     View firstView = inflater.inflate(R.layout.main_layout, container, false);
 listView = (ExpandableListView) firstView.findViewById(R.id.expandableListView1);
listView.setOnChildClickListener(new OnChildClickListener()
         {

             @Override
             public boolean onChildClick(ExpandableListView arg0, View arg1, int arg2, int arg3, long arg4)
             {
                 Toast.makeText(getActivity().getBaseContext(), "Child clicked", Toast.LENGTH_LONG).show();
                 return false;
             }
         });

код адаптера:

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private Context context;

    private ArrayList<String> groups;

    private ArrayList<ArrayList<FarmaciListItem>> children;

    public ExpandableListAdapter(Context context, ArrayList<String> groups,
            ArrayList<ArrayList<FarmaciListItem>> children) {
        this.context = context;
        this.groups = groups;
        this.children = children;
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return children.get(groupPosition).get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    // Return a child view. You can load your custom layout here.
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
            View convertView, ViewGroup parent) {
        FarmaciListItem farmacoItem = (FarmaciListItem) getChild(groupPosition, childPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.child_layout, null); 
        }
        TextView tv = (TextView) convertView.findViewById(R.id.tvChild);
        tv.setText("   " + farmacoItem.getName());

        // Depending upon the child type, set the imageTextView01
        tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
        if (farmacoItem instanceof PesoItem) {
            tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.car, 0, 0, 0);
        }
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return children.get(groupPosition).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return groups.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    // Return a group view. You can load your custom layout here.
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
            ViewGroup parent) {
        String group = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.group_layout, null);
        }
        TextView tv = (TextView) convertView.findViewById(R.id.tvGroup);
        tv.setText(group);
        return convertView;
    }
  • 0
    Пожалуйста, покажи код!
Теги:
listener
android-layout

2 ответа

2
Лучший ответ

Проблема в том, что в вашем ребенке есть настраиваемые элементы. Например, рассмотрим кнопку, по умолчанию она будет в сфокусированном состоянии. Поэтому установка этого параметра в false сделает это.

В вашем случае, возможно, для флажка добавить атрибут ниже

  android:focusable="false"

это должно сделать трюк.

  • 0
    точно, теперь это работает отлично, спасибо всем за ответы; если я щелкаю строку, она вызывает onChildClick, и если я нажимаю флажок внутри этой строки, она вызывает слушателя, который теперь я установил в адаптере.
  • 0
    да уж. Я прошел через это .. не проблема. любая помощь. в любой момент. :)
2

set android:focusable="false" для настраиваемого элемента, например checkbox

Ещё вопросы

Сообщество Overcoder
Наверх
Меню