2017-10-06 42 views
-5

我想单击Navigation Drawer上的某个项目时,更改片段。 当我使用add()和replace()方法时,我的应用程序崩溃。当我使用FragmentTransaction的add()和replace()方法时,我的应用程序崩溃

以下是我的代码。

EventActivity.java:

public class EventActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener { 

    FragmentTransaction fragmentTransaction; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_event); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    fragmentTransaction = getSupportFragmentManager().beginTransaction(); 


/** App crashes when I add this Line, but there is no error on the console **/ 
    fragmentTransaction.add(R.id.main_container, new AboutFragment()); 
    fragmentTransaction.commit(); 

    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 boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    switch(id) { 
     case R.id.nav_about: 
      //.setVisibility(View.GONE); 
      fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

/** Error here **/ 
      fragmentTransaction.replace(R.id.main_container, new AboutFragment()); 
      fragmentTransaction.commit(); 
      break; 
     case R.id.nav_agenda: 
      break; 
     case R.id.nav_news_feed: 
      break; 
     case R.id.nav_speakers: 
      break; 
     case R.id.nav_contact_us: 
      break; 
     case R.id.nav_chat: 
    } 
    //End of EventActivity.java 

app_bar_event.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
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="com.tedxdsce.tedxdsce.EventActivity"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 
    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_container" 
     > 
    </FrameLayout> 

    <include layout="@layout/content_event" /> 
</LinearLayout> 



<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="@dimen/fab_margin" 
    app:srcCompat="@android:drawable/ic_dialog_email" /> 

的层次是:

activity_event.xml - > app_bar_event.xml - main_container(的FrameLayout ) - > content_event.xml

非常感谢您在这个问题上的时间和协助。

编辑:该应用程序只是在日志控制台中没有任何错误崩溃。

+5

什么是错误?请发布错误日志。 –

+1

显示您的关注条款代码 –

+0

发布aboutFragment代码 – Anonymous

回答

1

首先欢迎SO,如果您发布任何问题,然后至少发布错误 日志。这样其他开发人员可以直接检测到错误。 您应该重播其他开发者的评论! 这是我在这里看不到的

不管怎样,设置你的抽屉布局和导航视图是这样的。

public class MainActivity extends AppCompatActivity implements View.OnClickListener ,NavigationView.OnNavigationItemSelectedListener { 

       String TAG = "MainActivity"; 
       DrawerLayout drawer; 
       NavigationView navigationView; 
       Toolbar toolbar; 


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

        getData(); 
        init(); 
        setData(); 
        setListner(); 
       } 

       private void setListner() { 
       } 



       private void init() { 


        navigationView = (NavigationView) findViewById(R.id.nav_view); 
        drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
        toolbar = (Toolbar) findViewById(R.id.toolbar); 

       } 

       private void setData() { 


        toolbar.setTitle(getResources().getString("title")); 
        setSupportActionBar(toolbar); 
        // getSupportActionBar().setTitle("Home"); 
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
          this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
        drawer.setDrawerListener(toggle); 
        toggle.syncState(); 

        //Setting default as first fragment which is at position 0 
        navigationView.getMenu().getItem(0).setChecked(true); 
        onNavigationItemSelected(navigationView.getMenu().getItem(0)); 
        //toggle.setDrawerIndicatorEnabled(false); 
        navigationView.setNavigationItemSelectedListener(this); 

       } 

    @Override 
     public void onClick(View v) { 

     } 


     @Override 
     public boolean onNavigationItemSelected(@NonNull MenuItem item) { 

      int id = item.getItemId(); 
      Fragment fragment = null; 
      switch (id) { 

       case R.id.about_us: 
        toolbar.setTitle(getResources().getString("title of your fragment")); 
        getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
        fragment = new AboutFragment(); 
        break; 

      // other fragments as per the navigation items... 
      } 

      android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_container, fragment); 
      fragmentTransaction.commit(); 
      drawer.closeDrawer(GravityCompat.START); 
      return true; 
     } 

    } 

我希望你的公司简介片段是正确的。

+0

谢谢,但我不得不添加一个接口方法来解决它。控制台上没有日志。 – 96var3

0

感谢所有为你的答案。

我已经解决了这个问题。我忘记了实现onFragmentInteracion接口。 PS:我之前无法弄清楚它,因为我的应用程序在没有任何错误日志的情况下一直崩溃。

相关问题