Как вызвать onListItemClick в ListFragment - PullRequest
6 голосов
/ 23 декабря 2011

В макете планшета моего приложения у меня есть три элемента ListFragments и один обычный фрагмент, назовем их Марка, Модель, Размер и Детали.Сначала заполняется список Make, затем на основе выбора Make заполняется список Model;при выборе модели заполняется список размеров;когда выбран размер, отображаются детали.Каждое из этих событий (выбор элемента списка) обрабатывается с помощью обработчика onListItemClick.

При запуске я хочу заполнить список Make, выбрать первый Make в списке и заставить его пройти через обработчик onListItemClick для заполнениясписок моделей (и т. д., чтобы все списки были заполнены, а детали отображались - это также должно происходить при любом выборе в любом из списков - выбирайте первый элемент в следующем списке, пока мы не покажемподробности).Обратите внимание, что у меня есть контроль над БД, и для каждой Марки всегда будет хотя бы одна Модель, для каждой Марки / Модели хотя бы один Размер, для каждой Марки / Модели / Размера ровно одна Деталь.

Итак,Я хочу выбрать первый элемент в списке и вызвать его обработчик onListItemClick.Я пробовал следующее (с соответствующей проверкой границ и т. Д.), Но это не работает.

getListView().setItemChecked(0, true);

Единственное изменение в ListFragment «из коробки» - установить CacheColorHint как таковой

getListView().setCacheColorHint(R.color.GhostWhite);

где GhostWhite установлен в файле styles.xml как

<color name="GhostWhite">#88FFFFFF</color>

Есть идеи?

Заранее спасибо.

Ответы [ 5 ]

14 голосов
/ 25 июня 2012

Чтобы выбрать первый элемент в списке, сначала получите фокус от прикосновения, затем выберите первый элемент, затем запустите обработчик onclick

int position = 0;
getListView().requestFocusFromTouch();
getListView().setSelection(position);
getListView().performItemClick(getListView().getAdapter().getView(position, null, null), position, position);
1 голос
/ 01 марта 2012

в классе Fragment в onActivityCreated (Bundle saveInstanceState) , вы можете добавить следующее:

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //if the parent is in the landscape, make the first item selected
        if (getActivity().getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
            try {
                if (mItems.size() > 0) {
                    //notify the activity that an item is selected
                    mListener.onMasterItemSelected(mItems.get(0));
                }
            } catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
    }
1 голос
/ 16 января 2012

1.) В OnActivityCreated вашего фрагмента списка создайте интерфейс, подобный следующему:

public interface ListItemSelectedListener {
        public void onListItemSelected(int index);
}

2.) Реализуйте интерфейс в своем задании 3.) Создайте private ListItemSelectedListener selectedListener в своем фрагменте списка 4.)Установите selectedListener.onListItemSelected(0) в OnActivityCreated.

Вот как у меня это работало с использованием пакета поддержки Android - должно быть похоже на HC

1 голос
/ 29 января 2012

Попробуйте добавить это ,, это работает в моем проекте:

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    Intent intent = new Intent();
    intent.setClass(getActivity(), someActivity.class);
    startActivity(intent);
}
1 голос
/ 23 декабря 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...