2014-02-25 42 views
0

我最近完成了一個項目,使用活動和一個工作得很好的導航抽屜。我決定建立一個更強大的項目,我會用碎片代替新的活動。當然,我的代碼幾乎完全相同,但是當選擇導航抽屜中的項目時,我無法觸發onClick。任何幫助將是美好的。我很擔心drawerNavListView(左側導航欄抽屜)Android OnItemClickListener沒有觸發

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); 

    } 
} 
+0

你有在ListView的行中的按鈕嗎? – Blackbelt

+0

抽屜中的項目是一個線性佈局基礎,包含圖像和文字瀏覽 – Elliott

+0

假設LinearLayout是您的項目行的根目錄,請向其添加android:descendantFocusability =「blocksDescendants」並重試一次 – Blackbelt

回答

2

原來整個問題是我的XML文件中爲主要佈局。顯然,使用包含主屏幕片段的線性佈局在導航抽屜的兩個列表視圖上激活了onclick監聽器。我原本是在兩個以下,並由於某種原因,這導致了我的問題。希望這有助於未來的人。

相關問題