0

我有一个项目导航抽屉使用库(https://github.com/mikepenz/MaterialDrawer)滑动选项卡包含3片段(HomeFragment,LiveFragment,MovieFragment)。从导航抽屉选择滑动标签菜单项与一些片段

我在MainActivity.class中创建了导航抽屉,还有一些项目(Home,Live TV,Movie)。我想要当我从导航抽屉单击项目主页,然后去HomeFragment。我已经尝试了下面的代码,但是当我从导航抽屉中单击项目时,没有任何事情发生。 请帮我解决这个问题。谢谢:)

这是我MainAactivity.class

public class MainActivity extends AppCompatActivity{ 
public final static int NAV_ID_FRAG_ONE = 1; 
public final static int NAV_ID_FRAG_TWO = 2; 
public final static int NAV_ID_FRAG_THREE = 3; 
public final static int NAV_ID_ABOUT_ACTIVITY = 6; 

Toolbar toolbar; 
private SlidingTabLayout mSlidingTabLayout; 
private ViewPager mViewPager; 
private Drawer result; 
private AccountHeader headerResult; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); 
    toolbar.setTitle("JMN Anywhere"); 
    setSupportActionBar(toolbar); 


    mViewPager = (ViewPager) findViewById(R.id.vp_tabs); 
    mViewPager.setAdapter(new TabAdapter(getSupportFragmentManager(), this)); 

    mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.st1_tabs); 
    mSlidingTabLayout.setDistributeEvenly(true);//meratakan posisi icon 
    mSlidingTabLayout.setBackgroundColor(getResources().getColor(R.color.colorPrimary)); 
    mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.slidingcolor)); 
    mSlidingTabLayout.setCustomTabView(R.layout.tab_view, R.id.tv_tab); 
    mSlidingTabLayout.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    }); 

    mSlidingTabLayout.setViewPager(mViewPager); 
    //Navigation Drawer 
    //Header 
    AccountHeader headerResult = new AccountHeaderBuilder() 
      .withActivity(this) 
      .withCompactStyle(false) 
      .withSavedInstance(savedInstanceState) 
      .withThreeSmallProfileImages(false) 
      .withHeaderBackground(R.drawable.header) 
      .build(); 

    //List Drawer 
    Drawer result = new DrawerBuilder() 
      .withActivity(this) 
      .withToolbar(toolbar) 
      .withDisplayBelowStatusBar(true) 
      .withActionBarDrawerToggleAnimated(true) 
      .withDrawerGravity(Gravity.LEFT) 
      .withSavedInstance(savedInstanceState) 
      .withAccountHeader(headerResult) 
      .withHasStableIds(true) 
      .withAccountHeader(headerResult) //set the AccountHeader we created earlier for the header 
      .addDrawerItems(//set item drawer 
        new PrimaryDrawerItem().withName("Home").withDescription("Beranda").withIcon(R.drawable.ic_home_black_48dp).withIdentifier(NAV_ID_FRAG_ONE).withSelectable(false), 
        new PrimaryDrawerItem().withName("Live TV").withDescription("Siaran Televisi").withIcon(R.drawable.ic_live_tv_black_48dp).withIdentifier(NAV_ID_FRAG_TWO).withSelectable(false), 
        new PrimaryDrawerItem().withName("Movies").withDescription("Film-film").withIcon(R.drawable.ic_local_movies_black_48dp).withIdentifier(NAV_ID_FRAG_THREE).withSelectable(false), 
        new ExpandableDrawerItem().withName("Categories").withLevel(2).withIdentifier(4).withSelectable(false).withSubItems(
          new SecondaryDrawerItem().withName("Action").withLevel(3).withIdentifier(2000), 
          new SecondaryDrawerItem().withName("Comedy").withLevel(3).withIdentifier(2001) 
        ), 
        new SectionDrawerItem().withName("Others"), 
        new SecondaryDrawerItem().withName("Account").withIcon(R.drawable.ic_account_box_black_48dp).withIdentifier(5).withSelectable(false), 
        new SecondaryDrawerItem().withName("About").withIcon(R.drawable.ic_info_black_48dp).withIdentifier(NAV_ID_ABOUT_ACTIVITY).withSelectable(false), 
        new SecondaryDrawerItem().withName("Logout").withIcon(R.drawable.ic_exit_to_app_black_48dp).withIdentifier(7).withSelectable(false) 
      ) 
      .withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() { 
       @Override 
       public boolean onItemClick(View view, int i, IDrawerItem drawerItem) { 
        Fragment fragment = null; 

        switch ((int) drawerItem.getIdentifier()) { 
         case NAV_ID_FRAG_ONE: 
          fragment = new HomeFragment(); 
          break; 
         case NAV_ID_FRAG_TWO: 
          fragment = new LiveFragment(); 
          break; 
         case NAV_ID_FRAG_THREE: 
          fragment = new MovieFragment(); 
          break; 
         case NAV_ID_ABOUT_ACTIVITY: 
          Intent intent = new Intent(MainActivity.this, AboutActivity.class); 
          startActivity(intent); 
          break; 
        } 

        return false; 
       } 
      }) 
      .withSelectedItem(1) 
      .withFireOnInitialOnClick(true) 
      // add the items we want to use with our Drawer 
      .build(); 

    new RecyclerViewCacheUtil<IDrawerItem>().withCacheSize(2).apply(result.getRecyclerView(), result.getDrawerItems()); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_settings: 
      // User chose the "Settings" item, show the app settings UI... 
      Intent in = new Intent("com.ajjunaedi.jmnanywhere.AboutActivity"); 
      startActivity(in); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 

}

+0

onItemClick方法中的fragmnet变量,已初始化但未曾使用。 – Hamid

回答

0

您需要添加FragmentManager添加/删除/替换一个片段。

 FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.fragment,fragment).commit(); 

getSupportFragmentManager()=返回FragmentManager以与与此活动关联的片段进行交互。

.beginTransaction()=在与此FragmentManager关联的Fragments上启动一系列编辑操作。

R.id.fragment是放置片段的容器的ID。

更多信息请参考这篇文章 - What does FragmentManager and FragmentTransaction exactly do?

编辑:你将你的switch语句后添加此。我希望这是你正在寻找的答案。

添加到您的XML文件。里面的底部布局

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

调整它到你的愿望。或者您可以简单地将行android:id="@+id/fragment"添加到您的baselayout。

+0

我没有这个R.id.fragment之前,我添加它? –

+0

您需要在xml文件中的布局中添加布局(线性/相对)。 –

+0

感谢您的帮助:) @ mark.jon –