Использование ExpandableListFragment из arne.jans никогда не вызывает событие onListItemClickListener - PullRequest
2 голосов
/ 09 февраля 2012

Я хотел использовать ExpandableListView для моего фрагмента, но поскольку он не является собственным, я использовал этот поток: https://stackoverflow.com/a/6193434/969881, содержащий класс ExpandableListFragment, расширяющий фрагмент.

Это хорошо работает, я объявляю свой фрагмент следующим образом:

public class MyExpListFragment extends ExpandableListFragment {

@Override
public void onCreate(Bundle savedInstanceState){
    // Set up our adapter
    mAdapter = new SimpleExpandableListAdapter(
        getActivity().getApplicationContext(),
        groupData,
        android.R.layout.simple_expandable_list_item_1,
        new String[] { NAME, IS_EVEN },
        new int[] { android.R.id.text1, android.R.id.text2 },
        childData,
        android.R.layout.simple_expandable_list_item_2,
        new String[] { NAME, IS_EVEN },
        new int[] { android.R.id.text1, android.R.id.text2 }
    );

    setListAdapter(mAdapter);
}

...

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    Log.i("TAG", "Item selected");
}



}

Но, к сожалению, onListItemClick никогда не запускается. У вас есть какие-либо подсказки?

У меня тоже есть такие проблемы:

  • onGroupCollapsed, onGroupExpand и onChildClick не являются переопределенными методами (например, метод onChildClick (ExpandableListView, View, int, int, long) типа ExpandableListFragment должен переопределять метод суперкласса). Интересно, почему мой класс расширяется? ExpandableListView.OnChildClickListener.

  • onGroupCollapsed, onGroupExpand и onChildClick также никогда не запускаются, вероятно потому, что они не рассматриваются как методы, переопределяющие методы суперкласса.

Заранее спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 10 февраля 2012

Нашел ответ на этот вопрос.

Я использую ExpandableListView в качестве частного параметра моего фрагмента, например:

private ExpandableListView elv;

Затем, после того, как мой фрагмент создан, я связываю свой elv с текущим ExpandableListView, созданным моим расширениям:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    elv = getExpandableListView();
}

Затем я могу вызвать любое событие моего ExpandableListView, например, так:

elv.setOnGroupClickListener(new OnGroupClickListener() {    
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
        Log.d("TAG", "Group number " + groupPosition + " is clicked "); 
        return false;
    }
});
0 голосов
/ 30 января 2013

в моем суперклассе ExpandableListFragment я добавляю эти методы

@Override
    public void onActivityCreated (Bundle savedInstanceState) {
        Log.d("LocalListFragment", "onActivityCreated");
        super.onContentChanged();
        super.onActivityCreated(savedInstanceState);
    }
    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

        Map<String, String> childmap = (Map<String, String>) mAdapter.getChild(groupPosition, childPosition);
        String c = (String)childmap.get(CHILD);

        Map<String, String> groupmap = (Map<String, String>) mAdapter.getGroup(groupPosition);
        String g = (String)groupmap.get(GROUP);
        Log.d("LocalListFragment", "onChildClick c="+c+" g="+g);

        return false;
    }

похоже, хорошо работает

К вашему сведению,

private static final String GROUP = "GROUP";
    private static final String CHILD = "CHILD";

используется при создании карт, подобных этому curGroupMap.put (GROUP, "GROUP" + i);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...