【问题标题】:Navigation view Intent导航视图意图
【发布时间】:2018-04-10 11:22:53
【问题描述】:

我正在创建一个导航抽屉,我在菜单中添加了一些项目,我的一个按钮是一个注销按钮,我想在其中创建一个进入另一个活动类的意图,这是我的编码:

public void selectItemDrawer(MenuItem menuItem){
    Fragment myFragment = null;
    Class fragmentclass;
    int id = menuItem.getItemId();
    switch (menuItem.getItemId()){
        case R.id.Products:
            fragmentclass = Prods.class;
            break;
        case R.id.cus:
            fragmentclass = Customer.class;
            break;
        case R.id.calc:
            fragmentclass = Calculator.class;
            break;

        default:
            fragmentclass = Prods.class;
    }
    try {
        myFragment = (Fragment) fragmentclass.newInstance();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    if (id == R.id.nav_send) {
        Intent jj = new Intent(Navigation.this,login.class);
        startActivity(jj);

    }
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.lt,myFragment).commit();
    menuItem.setChecked(true);
    setTitle(menuItem.getTitle());
    mDrawer.closeDrawers();

当我运行代码时,当我单击注销选项时应用程序突然关闭,我收到以下错误:

FATAL EXCEPTION: main
                                                                                Process: com.digitialninja.mohammed.curtainclub, PID: 932
                                                                                java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.Object.getClass()' on a null object reference

这是我的 oncreate:

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_navigation);
    mDrawer = (DrawerLayout) findViewById(R.id.drawer);
    mToggle = new ActionBarDrawerToggle(this,mDrawer,R.string.open,R.string.close);
    mDrawer.addDrawerListener(mToggle);
    NavigationView nvDrawer = (NavigationView) findViewById(R.id.nv);
    mToggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    setupDrawerContent(nvDrawer);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mToggle.onOptionsItemSelected(item)){
        return true ;
    }
    return super.onOptionsItemSelected(item);
}

这是我的布局:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Navigation"
    android:id="@+id/drawer"
    android:background="@drawable/background">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/lt">

    </RelativeLayout>

    <android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:id="@+id/nv"
        app:headerLayout="@layout/nvheader"
        app:menu="@menu/drawermenu"
        android:layout_gravity="start">


    </android.support.design.widget.NavigationView>

</android.support.v4.widget.DrawerLayout>

【问题讨论】:

标签: android navigation navigation-drawer


【解决方案1】:

您的Activity 中没有任何Fragment,所以我认为您应该更改以下行:

fragmentManager.beginTransaction().replace(R.id.lt,myFragment).commit();

收件人:

fragmentManager.beginTransaction().add(R.id.lt,myFragment).commit();

【讨论】:

    【解决方案2】:

    用这个替换你的代码。

     public void selectItemDrawer(MenuItem menuItem){
            Fragment myFragment = null;
            int id = menuItem.getItemId();
    
            if (id == R.id.nav_send) {
                Intent jj = new Intent(Navigation.this,login.class);
                startActivity(jj);
            }
            else {
                switch (id) {
                    case R.id.Products:
                        myFragment = Prods().newInstance();
                        break;
                    case R.id.cus:
                        myFragment = Customer().newInstance();
                        break;
                    case R.id.calc:
                        myFragment = Calculator().newInstance();
                        break;
    
                    default:
                        myFragment = Prods().newInstance();
                }
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.lt,myFragment).commit();
            }
            mDrawer.closeDrawers();
            setTitle(menuItem.getTitle());
            menuItem.setChecked(true);
        }
    

    【讨论】:

    • 给出错误提示 method call expected 并在“产品、客户、计算器”下划线
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多