更改抽屉菜单android中的项目

时间:2016-12-19 09:18:38

标签: java android android-fragments navigation-drawer

我正在开发这样的抽象菜单: enter image description here

我把代码编写到最后阶段。这就是我所拥有的:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

public class drawermenu extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       // setSupportActionBar(toolbar);
        //getSupportActionBar().hide();
        getSupportActionBar().setElevation(0);

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    }

    @Override
    public void onBackPressed() {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_home) {
            // Handle the camera action
        } else if (id == R.id.nav_points) {

        } else if (id == R.id.nav_coupons) {

        } else if (id == R.id.nav_about) {

        }

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
}

现在我希望能够在菜单项之间切换。 我该怎么办?我应该每个都有一个片段吗? 任何人都可以根据我的代码向我提供有关如何做到这一点的详细信息吗?

3 个答案:

答案 0 :(得分:0)

当您在应用程序的顶级导航中使用navigationView时,最好在活动中使用片段。

这是对的..

navigationView.setNavigationItemSelectedListener(this);

和..

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        // Handle the camera action
        getSupportFragmentManager.beginTransaction().replace(containerId, yourFragmentInstance).commit();
    } else if (id == R.id.nav_points) {

    } else if (id == R.id.nav_coupons) {

    } else if (id == R.id.nav_about) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

这是你替换片段的方法

getSupportFragmentManager.beginTransaction().replace(containerId, yourFragmentInstance).commit();

答案 1 :(得分:0)

查看我的活动。

public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener {

    private DrawerLayout drawer;
    private Toolbar toolbar;
    private ActionBarDrawerToggle toogle;
    private ListView navList;
    private SwitchCompat langSwitch;
    private DashBoardCompanyInfoModel mDashBoardCompanyInfoModel;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        navList = (ListView) findViewById(R.id.menu_list_view_list);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        langSwitch = (SwitchCompat) findViewById(R.id.lang_switch);
        Locale current = getResources().getConfiguration().locale;
        if (current.getLanguage().equalsIgnoreCase("nl")) {
            langSwitch.setChecked(true);
        } else {
            langSwitch.setChecked(false);
        }
        switchColor(langSwitch.isChecked());
        langSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                switchColor(b);
                changeLanguage();
                final Intent refresh = new Intent(MainActivity.this, MainActivity.class);
                startActivity(refresh);
                finish();
            }
        });


        toogle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toogle);
        toogle.syncState();


        final NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
        toogle.setToolbarNavigationClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Utils.hideSoftKeyboard(MainActivity.this);
                onBackPressed();
            }
        });
        initComponent();
        setUpDrawer();
        replaceFragment(new DashboardFragment());
    }


    private void switchColor(boolean checked) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            langSwitch.getThumbDrawable().setColorFilter(checked ? Color.WHITE : Color.WHITE, PorterDuff.Mode.MULTIPLY);
            final int color = ContextCompat.getColor(this, R.color.temp_login);
            langSwitch.getTrackDrawable().setColorFilter(color, PorterDuff.Mode.MULTIPLY);
        }
    }

    private void setUpDrawer() {
        View header = (View) getLayoutInflater().inflate(R.layout.header_view, null);
        navList.addHeaderView(header);
        final ArrayList<NavigationMenuModel> data = new ArrayList<>();
        final NavigationMenuModel model = new NavigationMenuModel();
        model.setMenuName(getString(R.string.about_us));
        model.setMenuResource(R.drawable.ic_info_white);
        data.add(model);
        final NavigationMenuModel model1 = new NavigationMenuModel();
        model1.setMenuName(getString(R.string.contact_us));
        model1.setMenuResource(R.drawable.ic_email_white);
        data.add(model1);

        final NavigationMenuModel model2 = new NavigationMenuModel();
        model2.setMenuName(getString(R.string.log_out));
        model2.setMenuResource(R.drawable.ic_logout);
        data.add(model2);

        final NavigationListAdapter adapter = new NavigationListAdapter(this, android.R.layout.simple_spinner_item, data);
        navList.setAdapter(adapter);
        adapter.notifyDataSetChanged();
        navList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                    case 1:
                        addContactUsAndAboutUsFragment(getString(R.string.about_us));
                        break;
                    case 2:
                        addContactUsAndAboutUsFragment(getString(R.string.contact_us));
                        break;
                    case 3:
                        displayLogoutDialog();
                        break;

                }
            }
        });


    }

    private void initComponent() {

    }

    public void addFragment(final Fragment newFragment, final Fragment hideFragment) {
        getFragmentManager()
                .beginTransaction()
                .add(R.id.content_main_container, newFragment, newFragment.getClass().getSimpleName())
                .hide(hideFragment)
                .addToBackStack(hideFragment.getClass().getSimpleName())
                .commit();
    }

    public void replaceFragment(final Fragment newFragment) {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.content_main_container, newFragment, newFragment.getClass().getSimpleName())
                .commit();
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (toogle.onOptionsItemSelected(item))
            return true;

        switch (item.getItemId()) {
            case android.R.id.home:
                Utils.hideSoftKeyboard(this);
                if (getFragmentManager().getBackStackEntryCount() > 0) {
                    getFragmentManager().popBackStack();
                } else {
                    finish();
                }
                return true;
//            break;

        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            if (getFragmentManager().getBackStackEntryCount() > 0) {
                getFragmentManager().popBackStack();
            } else {
                super.onBackPressed();
            }
        }
    }

    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }

    public void setToolBar(String title, boolean back_flag) {
        getSupportActionBar().setTitle(title);
        toolbar.getMenu().clear();
        if (back_flag) {
            toogle.setDrawerIndicatorEnabled(false);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        } else {
            getSupportActionBar().setDisplayHomeAsUpEnabled(false);
            getSupportActionBar().setDisplayShowHomeEnabled(false);
            toogle.setDrawerIndicatorEnabled(true);
            drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);

        }


    }

    private void addContactUsAndAboutUsFragment(final String title) {
        final Bundle bundle = new Bundle();
        bundle.putString(Constants.KEY_WEB_VIEW_TITLE, title);
        final AboutUsFragment aboutUsFragment = new AboutUsFragment();
        aboutUsFragment.setArguments(bundle);
        addFragment(aboutUsFragment, getFragmentManager().findFragmentById(R.id.content_main_container));
    }


    public Toolbar getToolbar() {
        return toolbar;
    }


    private void displayLogoutDialog() {
        final AlertDialog.Builder dialog = new AlertDialog.Builder(this);
        dialog.setTitle(getString(R.string.app_name));
        dialog.setMessage(R.string.logout_message);
        dialog.setCancelable(false);
        dialog.setPositiveButton(getString(R.string.dialog_yes), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                final PreferenceUtils preferenceUtils = new PreferenceUtils(MainActivity.this);
                preferenceUtils.clearPreference();
                final Intent intent = new Intent(MainActivity.this, SignUpActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(intent);
                finish();
            }
        });
        dialog.setNegativeButton(getString(R.string.dialog_no), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        dialog.show();
    }

    public DashBoardCompanyInfoModel getmDashBoardCompanyInfoModel() {
        return mDashBoardCompanyInfoModel;
    }

    public void setmDashBoardCompanyInfoModel(DashBoardCompanyInfoModel mDashBoardCompanyInfoModel) {
        this.mDashBoardCompanyInfoModel = mDashBoardCompanyInfoModel;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        changeLanguage();
    }

    private void changeLanguage() {
        if (langSwitch.isChecked()) {
            final Locale myLocale = new Locale("nl");
            final Resources res = getResources();
            final DisplayMetrics dm = res.getDisplayMetrics();
            final Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
        } else {
            final Locale myLocale = new Locale("en");
            final Resources res = getResources();
            final DisplayMetrics dm = res.getDisplayMetrics();
            final Configuration conf = res.getConfiguration();
            conf.locale = myLocale;
            res.updateConfiguration(conf, dm);
        }
    }

答案 2 :(得分:0)

它取决于你想在MainMenu活动上做什么,如果你想跳转到另一个活动来处理更多内部功能,或者只是显示那些菜单的任何布局。

如果它做了另一个功能:

  

每个菜单开始任何新活动

如果它只是显示数据

public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();
    Fragment fragment=null;
    int id = item.getItemId();

    if (id == R.id.nav_home) {
        // Handle the camera action
        fragment = new HomeFragment();
    } else if (id == R.id.nav_points) {
      fragment = new PointFragment();
    } else if (id == R.id.nav_coupons) {
      fragment = new CouponFragment();
    } else if (id == R.id.nav_about) {
      fragment = new AboutFragment();
    }
    fragmentTransaction.replace(containerId, fragment,fragment.getClass().getSimpleName());
    fragmentTransaction.commit();
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}