简体   繁体   English

导航抽屉选择零索引位置而不是其他位置

[英]Navigation drawer selecting zero index position and not working other positions

I am creating an application in which I want to navigate different activities on the basis of selection of list view available drawer but it is just selecting zero position of list view and not even working other position number I tried a lot but no idea how to deal with it here is the code... 我正在创建一个应用程序,我希望在选择列表视图可用抽屉的基础上导航不同的活动,但它只是选择列表视图的零位置,甚至没有工作其他位置编号我尝试了很多但不知道如何处理这里有代码......

  public class NowPlaying extends Activity {

  private DrawerLayout mDrawerLayout;
  private ListView mDrawerList;
  private ActionBarDrawerToggle mDrawerToggle;

  private CharSequence mDrawerTitle;
  private CharSequence mTitle;
  private String[] mPlanetTitles;
  Intent drawerIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.now_playing);

    mTitle = mDrawerTitle = getTitle();
    mPlanetTitles = getResources().getStringArray(R.array.playing_now_list);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

                 mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,GravityCompat.START);
    set up the drawer's list view with items and click listener
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, mPlanetTitles));
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    mDrawerToggle = new ActionBarDrawerToggle(
            this,
            mDrawerLayout,
            R.drawable.ic_drawer,
            R.string.drawer_open,
            R.string.drawer_close
    ) {
        public void onDrawerClosed(View view) {
           // getActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
         //   getActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        selectItem(0);
    }
}
public boolean onPrepareOptionsMenu(Menu menu) {

    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    //menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}



private class DrawerItemClickListener implements ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      selectItem(position);

    }
}
private void selectItem(int position) {

    mDrawerList.setItemChecked(position, true);



    /*switch(position){

        case 0:
           drawerIntent = new Intent(NowPlaying.this,MainActivity.class);
           startActivity(drawerIntent);
           break;
        case 1:
            drawerIntent = new Intent(NowPlaying.this,Artist.class);
            startActivity(drawerIntent);
            break;
        case 2:
        drawerIntent = new Intent(NowPlaying.this,Favorites.class);
        startActivity(drawerIntent);
        break;
        case 3:
            drawerIntent = new Intent(NowPlaying.this,Store.class);
            startActivity(drawerIntent);
            break;
        case 4:
            drawerIntent = new Intent(NowPlaying.this,Scan.class);
            startActivity(drawerIntent);
            break;
    }*/

    mDrawerLayout.closeDrawer(mDrawerList);
}

@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 toggls
    mDrawerToggle.onConfigurationChanged(newConfig);
}

public static class PlanetFragment extends Fragment { public static class PlanetFragment extends Fragment {

public PlanetFragment() {

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.store, container, false);
    return rootView;
}

} } }}

What actually logcat says?? 实际上logcat说什么? And i have seen that you have commented out your switch portion..Another observation is that as you are using sliding drawer i think you need that drawer as you go further into your app.But you are using intent after clicking one option.You must use fragment .You can see this link to learn slidingdrawer.I thing you can implement like this. 我已经看到你已经注释掉了你的开关部分。另一个观察是,当你使用滑动抽屉时,我认为你需要那个抽屉,因为你进一步进入你的应用程序。但是你在点击一个选项后使用意图。你必须使用fragment 。你可以看到这个链接来学习slidedrawer。我可以像这样实现。

My code:

public class SlidingDrawerActivity extends ActionBarActivity {
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private LinearLayout mDrawerLinear;
    private TextView profile_name;
    public ArrayList <Search> searchData;
    private ImageView profilePic;
    public int Count;
    // nav drawer title
    private CharSequence mDrawerTitle;

    Fragment fragment = null;

    // used to store app title
    private CharSequence mTitle;

    // slide menu items
    private String[] navMenuTitles;
    private TypedArray navMenuIcons;

    private ArrayList<NavDrawerItem> navDrawerItems;
    private NavDrawerListAdapter adapter;

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

        //initializing profile_name
        profile_name = (TextView) findViewById(R.id.profile_name);
        profilePic = (ImageView) findViewById(R.id.profile_image);

        String profileName = getIntent().getExtras().getString(PropertyNames.Userinfo_Username.getProperty());
        profile_name.setText(profileName);

        String imageString = getIntent().getExtras().getString(PropertyNames.Userinfo_Profilepic.getProperty());
        if(imageString != null)
            profilePic.setImageBitmap(ImageConverter.stringToimageConverter(imageString));

        mTitle = mDrawerTitle = getTitle();

        // load slide menu items
        navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

        // nav drawer icons from resources
        navMenuIcons = getResources()
                .obtainTypedArray(R.array.nav_drawer_icons);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLinear = (LinearLayout) findViewById(R.id.left_drawer);
        mDrawerList = (ListView) findViewById(R.id.list_slidermenu);

        navDrawerItems = new ArrayList<NavDrawerItem>();

        // adding nav drawer items to array

        navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[5], navMenuIcons.getResourceId(5, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[6], navMenuIcons.getResourceId(6, -1)));
        navDrawerItems.add(new NavDrawerItem(navMenuTitles[7], navMenuIcons.getResourceId(7, -1)));


        // Recycle the typed array
        navMenuIcons.recycle();

        // setting the nav drawer list adapter
        adapter = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems);
        mDrawerList.setAdapter(adapter);





        // enabling action bar app icon and behaving it as toggle button
        // getActionBar().setDisplayHomeAsUpEnabled(true);
        //getActionBar().setHomeButtonEnabled(true);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_toggle, //nav menu toggle icon
                R.string.app_name, // nav drawer open - description for accessibility
                R.string.app_name // nav drawer close - description for accessibility
        ) {
            public void onDrawerClosed(View view) {
                //getActionBar().setTitle(mTitle);
                // calling onPrepareOptionsMenu() to show action bar icons
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                //getActionBar().setTitle(mDrawerTitle);
                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            // on first time display view for first nav item
            displayView(0);

        }

        mDrawerList.setOnItemClickListener(new SlideMenuClickListener());

        // For editing Profile
        profile_name.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                fragment = new Edit_Profile();
                fragment.setArguments(getEmail());
                startFragment(fragment, -1);
                return false;
            }
        });
    }





    /**
     * Slide menu item click listener
     */
    private class SlideMenuClickListener implements
            ListView.OnItemClickListener {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position,
                                long id) {
            mDrawerLayout.closeDrawer(mDrawerLinear);
            // display view for selected nav drawer item
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    displayView(position);
                }
            },250);


        }
    }

    /**
     * Displaying fragment view for selected nav drawer list item
     */
    private void displayView(int position) {

        switch (position) {
            case 0:
                fragment = new HomeFragment();
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                break;
            case 1:
                fragment = new Friend_Search_Fragment();
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                break;
            case 2:
                fragment = new Groups_Fragment();
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                break;
            case 3:
                fragment = new Friend_Request_Fragment();
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                Bundle frienddata = new Bundle();
                frienddata.putString(Commands.Notification_job.getCommand(), Commands.Friends_Request.getCommand());
                fragment.setArguments(frienddata);
                break;
            case 4:
                fragment = new Friend_Request_Fragment();
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                Bundle groupdata = new Bundle();
                groupdata.putString(Commands.Notification_job.getCommand(), Commands.Group_Join_Group.getCommand());
                fragment.setArguments(groupdata);
                break;
            case 5:
                fragment = new StatusFragment();
                Bundle myWallData = new Bundle();
                myWallData.putString(Commands.Fragment_Caller.getCommand(), Commands.Called_From_MyWall.getCommand());
                myWallData.putString(PropertyNames.Userinfo_Mail.getProperty(), getEmail().getString(PropertyNames.Userinfo_Mail.getProperty()));
                fragment.setArguments(myWallData);
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                break;
            case 6:
                fragment = new OnlyGoogleMap();
                Bundle data = new Bundle();
                data.putString(Commands.SearchAndADD.getCommand(),Commands.ShowInMap.getCommand());
                fragment.setArguments(data);
                getFragmentManager().popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE);
                break;
            case 7:
                Intent intent = new Intent(SlidingDrawerActivity.this,SignIn.class);
                startActivity(intent);
                break;
            default:
                break;
        }
        startFragment(fragment, position);
    }

    private void startFragment(Fragment fragment, int position) {
        //mDrawerLayout.closeDrawer(mDrawerLinear);
        FragmentManager fm= getFragmentManager();
        int count = fm.getBackStackEntryCount();
        for (int i = 0; i < count; ++i) {
            fm.popBackStackImmediate();
        }

        if (fragment != null) {
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.frame_container,fragment);
            transaction.addToBackStack(null);
            transaction.commit();


            // update selected item and title, then close the drawer
            if (position != -1) {
                mDrawerList.setItemChecked(position, true);
                mDrawerList.setSelection(position);

            }
            /*if(position == 0){
                if(mDrawerList.getChildAt(1)!=null)
                mDrawerList.getChildAt(1).setEnabled(false);
            }*/
            //setTitle(navMenuTitles[position]);
            //mDrawerLayout.closeDrawer(mDrawerLinear);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }





    /**
     * Called when invalidateOptionsMenu() is triggered
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerLinear);
        //menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        //getActionBar().setTitle(mTitle);
    }

    /**
     * When using the ActionBarDrawerToggle, you must call it during
     * onPostCreate() and onConfigurationChanged()...
     */

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

    @Override
    public void onBackPressed() {
        if (getFragmentManager().getBackStackEntryCount() > 1) {
            //int count = getFragmentManager().getBackStackEntryCount();
            getFragmentManager().popBackStack();
        } else {
            Toast.makeText(this,"Leaving..",Toast.LENGTH_LONG).show();
            Intent sigIn = new Intent(SlidingDrawerActivity.this,SignIn.class);
            startActivity(sigIn);
        }
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM