Android OnItemClickListener не срабатывает

Недавно я закончил проект с использованием действий и навигационного ящика, который отлично работал. Я решил создать более надежный проект, я бы использовал фрагменты вместо новых действий. Конечно, мой код почти идентичен, но я не могу заставить onClick срабатывать при выборе элемента из панели навигации. Любая помощь будет замечательной. Меня беспокоит ящик NavListView (левый ящик навигации)

MainTemplate расширяет активность

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_template);

    // drawer creation
    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerListView = (ListView) findViewById(R.id.right_drawer);
    drawerNavListView = (ListView) findViewById(R.id.left_drawer);

    drawerItems = new ArrayList<NavDrawerItem>();
    navItem = new ArrayList<NavMenuItem>();

    navItem.add(new NavMenuItem("1", false, null));
    navItem.add(new NavMenuItem("2", true, "0"));
    navItem.add(new NavMenuItem("3", false, null));
    navItem.add(new NavMenuItem("4", false, null));
    navItem.add(new NavMenuItem("5", false, null));
    navItem.add(new NavMenuItem("6", false, null));
    navItem.add(new NavMenuItem("7", false, null));

    menuAdapter = new NavMenuAdapter(getApplicationContext(), navItem);
    drawerNavListView.setAdapter(menuAdapter);

    // create the blank fragment
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    MainPageFrag mFrag = new MainPageFrag();
    ft.add(R.id.fragment_space, mFrag);
    ft.commit();

    // JSON get class creation for notifications
    new myNotificationTask().execute(); // call class at bottom

    ...

    // listener for clicking of a notification drawer item
    drawerListView.setOnItemClickListener(new SlideOptionsClickListener());

    // listener for selecting a navigation drawer item
    drawerNavListView.setOnItemClickListener(new SlideNavClickListener());

    // getting screen size
    Display display = getWindowManager().getDefaultDisplay();
    screenSize = new Point();
    display.getSize(screenSize);
    // setting pixels per minute for device
    ppm = (screenSize.x * 4) / (25 * 60);

    // create handler to call the notification update every 30 seconds
    final Handler mHandler = new Handler();

    ...
}

... (тот же класс)

private class SlideNavClickListener implements ListView.OnItemClickListener {
    // this is where we inflate the fragment to the screen depending on the
    // selection
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        FragmentTransaction ft = getFragmentManager().beginTransaction();

        switch (position) {
        case 0: 

            ScheduleViewFrag sFrag = new ScheduleViewFrag();
            ft.replace(R.id.fragment_space, sFrag);
            ft.addToBackStack(null);
            ft.commit();
            break;
        case 1: 
            DelayFrag dFrag = new DelayFrag();

            Bundle bundle = new Bundle();
            bundle.putString(NOTIF_ID, drawerItems.get(position).getId());
            dFrag.setArguments(bundle);

            ft.replace(R.id.fragment_space, dFrag);
            ft.addToBackStack(null);
            ft.commit();
            break;
        default: // add more fragments once implemented here
                break;

        }

        drawerNavListView.setSelection(position);
        mDrawer.closeDrawer(drawerNavListView);

    }
}

person Elliott    schedule 25.02.2014    source источник
comment
у вас есть кнопки в строке ListView?   -  person Blackbelt    schedule 25.02.2014
comment
элементы в ящике представляют собой основу linearlayout с изображениями и текстовыми представлениями.   -  person Elliott    schedule 25.02.2014
comment
предположим, что LinearLayout является корнем строки вашего элемента, добавьте к нему android:descendantFocusability=blocksDescendants и повторите попытку.   -  person Blackbelt    schedule 25.02.2014
comment
не повезло, к сожалению   -  person Elliott    schedule 25.02.2014
comment
«onClick для запуска, когда выбран элемент из навигационного ящика», можете ли вы объяснить эту строку немного подробнее?   -  person Blackbelt    schedule 25.02.2014
comment
я открываю навигационный ящик и выбираю и элемент, должен быть вызван onItemClick из приведенного выше кода, после чего фрагмент загружается. Из всех моих попыток отладки onItemClick вообще не вызывается.   -  person Elliott    schedule 25.02.2014


Ответы (1)


Оказалось, что вся проблема была в моем XML-файле для основного макета. По-видимому, наличие linearlayout, содержащего фрагмент для главного экрана НАД двумя списками для навигационных ящиков, активировало прослушиватели onclick. Изначально у меня он был ниже двух, и по какой-то причине это вызвало мою проблему. Надеюсь, это поможет кому-то в будущем.

person Elliott    schedule 25.02.2014