آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

کلیک در navigation drawer کار نمی کند.

hossein626  10 سال پیش  10 سال پیش
0 0

سلام به دوستان

من در پروژم یک navigation drawer دارم که کلیک روی آیتم های آن کار نمی کند. دوستان کمک کنید. 

mainactivity:

   dataList = new ArrayList<DrawerItem>();
        mTitle = mDrawerTitle = getTitle();
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.Right_drawer);
        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.END);

        dataList.add(new DrawerItem("کل"));
        dataList.add(new DrawerItem("معین"));
        dataList.add(new DrawerItem("معین شناور"));
        dataList.add(new DrawerItem("تفصیلی"));
        dataList.add(new DrawerItem("تفصیلی شناور"));
        dataList.add(new DrawerItem("جزء"));
        dataList.add(new DrawerItem("جزء شناور"));
        dataList.add(new DrawerItem("ریز"));
        dataList.add(new DrawerItem("ریز شناور"));

        draweradapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item,dataList);
        mDrawerList.setClickable(true);
        mDrawerList.setAdapter(draweradapter);
        mDrawerToggle = new ActionBarDrawerToggle(this,mDrawerLayout,R.drawable.slideshow,R.string.drawer_open,R.string.drawer_close) {
            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                //Toast.makeText(getApplicationContext(), "Clicked", Toast.LENGTH_LONG).show();
                mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
                getActionBar().setTitle(mTitle);

            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
               // Toast.makeText(getApplicationContext(), "Clicked", Toast.LENGTH_LONG).show();
                getActionBar().setTitle(mDrawerTitle);

            }


        };

        mDrawerList.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                if (scrollState == SCROLL_STATE_IDLE) {
                    mDrawerList.bringToFront();
                    mDrawerLayout.requestLayout();
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            }
        });

        mDrawerList.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                if (scrollState == SCROLL_STATE_IDLE) {
                    mDrawerList.bringToFront();
                    mDrawerLayout.requestLayout();
                }
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            }
        });
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerList.setItemsCanFocus(true);
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
        ////// END
    }

    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggles
       mDrawerToggle.onConfigurationChanged(newConfig);
    }

    }

    private class DrawerItemClickListener implements ListView.OnItemClickListener {
       @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             switch (position) {
                   case 0:
                       G.CurrentstructureID=1;
                       break;
                   case 1:
                       G.CurrentstructureID=2;
                       break;
                   case 2:
                       G.CurrentstructureID=3;
                       break;
                   case 3:
                       G.CurrentstructureID=4;
                       break;
                   case 4:
                       G.CurrentstructureID=5;
                      break;
                   case 5:
                      G.CurrentstructureID=6;
                       break;
                   case 6:
                       G.CurrentstructureID=7;
                       break;
                   case 7:
                       G.CurrentstructureID=8;
                       break;
                   case 8:
                       G.CurrentstructureID=9;
                       break;

                   default:
                       break;
               }

               pushStack=true;
               G.hesabNameFilter = "";
           Toast.makeText(getApplicationContext(), "This Clicked", Toast.LENGTH_LONG).show();
           //FirstPageLoad();
               mDrawerList.setItemChecked(position, true);
               setTitle(dataList.get(position).getItemName());
              mDrawerLayout.closeDrawer(mDrawerList);
           }
    }
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
Morteza  10 سال پیش
0 0

از تکه کد زیر استفاده کنید شاید مشکل حل شد :

این کد رو آخر onCreate اضافه کنید

 mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

و این تکه کد رو در به صورت متد :

  private class SlideMenuClickListener implements ListView.OnItemClickListener {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//عملی که میخواید با انتخاب هر گزینه منو انجام بشه
}
}

البته اگر تکه کد بالا جواب داد پیشنهاد میکنم از روش زیر استفاده کنید :

 private class SlideMenuClickListener implements ListView.OnItemClickListener {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
displayView(position);
}
}

private void displayView(int position) {
switch (position) {
case 0:

break;
case 1:

break;
case 2:

break;
...
}
}

0 0
سلام دوست عزیز دقیقا کد شما را دارم. تو کدهای بالا خط های آخر هست. اجرا نمیشه این SlideMenuClickListener لا م .... :( (10 سال پیش)
0 0
درسته حق باشماست ،من به اون قسمت توجه نکردم (10 سال پیش)
+1 0
من خودم از این آموزش استفاده کردم و به خوبی جواب داد : لینک (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .