2012-04-09 2 views
5

У меня есть ExpandableListView, и я хочу зарегистрировать группу при нажатии на группу. К сожалению, код ниже возвращает всегда 0, как если бы я нажимал на 0-ю группу.Постоянная позиция группы OpenandListView для Android всегда 0

exList.setOnGroupClickListener(new OnGroupClickListener() { 

    @Override 
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
      groupPosition = ExpandableListView.getPackedPositionGroup(id); 

      Log.i("group position", groupPosition + ""); 
      return false; 
    } 

    }); 

У меня также есть longclicklistener о группах и Чайлдс, который работает прямо:

exList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 
... 
} 

Любые идеи?

+0

Вы используете пользовательский адаптер для ExpandableListView? – Cata

+0

есть. Мои другие слушатели работают правильно – erdomester

+0

ОК, убедитесь, что методы getItem и getItemId возвращают допустимые значения, а не 0 .. (в вашем пользовательском адаптере) вы также можете взглянуть на этот адаптер http://developer.android.com/resources/ samples/ApiDemos/src/com/example/android/apis/view/ExpandableList1.html – Cata

ответ

0

Использование listener OnGroupExpandListener, параметр метода onGroupExpand - это позиция группы в ExpandableListView.

Как что:

listView = (ExpandableListView) findViewById(R.id.expandableListView); 
listView.setOnGroupExpandListener(new OnGroupExpandListener() { 
    @Override 
    public void onGroupExpand(int groupPosition) { 
     Log.d(TAG, "pos " + groupPosition); 
    } 
}); 
0
@Override 
public Object getGroup(int groupPosition) { 
    Log.i(TAG, "* getGroup : groupPosition =" + groupPosition); 

    return categories[groupPosition]; 
} 

Когда проходит BaseExpandableListAdapter, вы получите выше метод переопределения. В приведенном выше разделе «Выход из системы» отображается номер группы нажатых.

В моем коде Категории означает набор данных Я перехожу к Расширяемый список как группы.

У вас будет другой вызов метода переопределения;

@Override 
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
... 
} 

С помощью этого метода вы можете позвонить следующим образом;

if(getGroup(groupPosition).toString().equals("GroupName")){ 
    //Do what even you like in for the clicked group 
} 

Это рабочий код и надеемся, что вы сможете это понять.

1

Ваше расширенное представление списка может находиться внутри прокрутки. Вы не можете иметь вложенный свиток.

+0

Спасибо! Мне это нужно. Я просто не мог понять, что я делаю неправильно. Я был в этом случае. – sunlover3

+1

рад помочь ... !! :) – navalkishoreb

3

Убедитесь, что у вас есть это для макета

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 


    <ExpandableListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

Вы не можете иметь ExpandableListView в ScrollView.