【问题标题】:Change fragments with navigation drawer Error使用导航抽屉错误更改片段
【发布时间】:2016-06-17 13:58:03
【问题描述】:

当我单击导航项时,我无法更改片段。它只发生在我的 FragmentTwo 中。提交导致错误并且应用程序关闭。拜托,有人可以帮助我吗?哪里出错了?

主要代码

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

    // Implementação do navigation view
    DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
    toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open, R.string.close);
    drawerLayout.addDrawerListener(toggle);
    toggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView);
    navigationView.setNavigationItemSelectedListener(this);

    if(savedInstanceState == null) {
        FragmentOne frag1 = new FragmentOne();
        FragmentTwo frag2 = new FragmentTwo();

        FragmentTransaction ft = fm.beginTransaction();
        ft.add(R.id.layoutFundo, frag1, "frag1");
        ft.commit();
    }
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if(toggle.onOptionsItemSelected(item))
        return true;
    return super.onOptionsItemSelected(item);
}

@Override
public boolean onNavigationItemSelected(MenuItem item) {
    FragmentOne frag1 = new FragmentOne();
    FragmentTwo frag2 = new FragmentTwo();
    FragmentTransaction ft = fm.beginTransaction();
    if (item.getItemId() == R.id.nav_menu_1) {
        ft.replace(R.id.layoutFundo, frag1, "frag1");
        ft.addToBackStack("pilha");
        showMessage("IF", "Entrou no if");
        Toast.makeText(InicioAdmin.this, "Novo", Toast.LENGTH_SHORT).show();
    } else if (item.getItemId() == R.id.nav_menu_2) {

        ft.replace(R.id.layoutFundo, frag2, "frag2");
        ft.addToBackStack("pilha");
        showMessage("ELSEIF", "Entrou no Elseif");
        Toast.makeText(InicioAdmin.this, "Outro", Toast.LENGTH_SHORT).show();
    } else {

        ft.replace(R.id.layoutFundo, frag1, "frag1");
        ft.addToBackStack("pilha");
        showMessage("ELSE", "Entrou no else");
    }
    ft.commit();

   /* switch (item.getItemId()) {

        case R.id.nav_menu_1:

            break;
        case R.id.nav_menu_2:

            break;
        default:

            break;


    }*/

    DrawerLayout dl = (DrawerLayout) findViewById(R.id.drawerLayout);
    if (dl.isDrawerOpen(GravityCompat.START))
        dl.closeDrawer(GravityCompat.START);


    return false;
}

// Método showMessage
public void showMessage (String title, String message)
{
    AlertDialog.Builder builder=new AlertDialog.Builder(this);
    builder.setCancelable(true);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.show();
}

片段一个代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.fragment_one, null);

    TextView tv = (TextView) view.findViewById(R.id.textView1);
    tv.setText("Fragmento 1");

    return (view);
}

片段二代码

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    /*
    View view = inflater.inflate(R.layout.fragment_two, null);

    TextView tv = (TextView) view.findViewById(R.id.textView1);
    tv.setText("Fragmento 2");
    */
    return (null);
}

这两个类扩展了 Fragment

【问题讨论】:

  • 你不能从onCreateView()返回null

标签: android android-fragments navigationview


【解决方案1】:

我认为您在片段中返回 null,这就是您收到错误的原因。请在片段中添加视图并运行它。希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多