2015-10-16 82 views
0

我的应用程序,有一个导航抽屉和滑动标签。替换片段不起作用

问题:我已经实现在主要活动滑动选项卡,的onclick抽屉式导航栏项目打开可依使用片段,它工作正常,但它隐藏我的主要活动实施的滑动标签内,

我目的:我希望默认页面滑动标签,如果我点击导航图标,滑动标签页面必须关闭并打开我为导航图标实现的片段中的内容。

代码如下。

activity_main.xml中:

<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:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 


<LinearLayout 
    android:id="@+id/container_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context=".MainActivity"> 


    <include 
     android:id="@+id/app_bar" 
     layout="@layout/app_bar" /> 

    <FrameLayout 
     android:id="@+id/container_body" 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" > 
    <tabs.SlidingTabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/ColorPrimary" 
     android:elevation="2dp" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    </FrameLayout> 
</LinearLayout> 


<fragment 
    android:id="@+id/fragment_navigation_drawer" 
    android:name="keleno.example.ramz.mapper_city.FragmentDrawer" 
    android:layout_width="260dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:layout="@layout/fragment_nav_drawer" 
    tools:layout="@layout/fragment_nav_drawer" /> 

MainActivity.java:

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener { 

Toolbar toolbar; 
ViewPager pager; 
ViewPagerAdapter adapter; 
SlidingTabLayout tabs; 
CharSequence Titles[] = {"CITY", "GO", "NEAR"}; 
int Numboftabs = 3; 
private FragmentDrawer drawerFragment; 
private Handler mHandler; 

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


    // Creating The Toolbar and setting it as the Toolbar for the activity 

    toolbar = (Toolbar) findViewById(R.id.app_bar); 
    setSupportActionBar(toolbar); 


    // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. 
    adapter = new ViewPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs); 

    // Assigning ViewPager View and setting the adapter 
    pager = (ViewPager) findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    // Assiging the Sliding Tab Layout View 
    tabs = (SlidingTabLayout) findViewById(R.id.tabs); 
    tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width 

    // Setting Custom Color for the Scroll bar indicator of the Tab View 
    tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.tabsScrollColor); 
     } 
    }); 

    // Setting the ViewPager For the SlidingTabsLayout 
    tabs.setViewPager(pager); 


    drawerFragment = (FragmentDrawer) 
      getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar); 
    drawerFragment.setDrawerListener(this); 


    // display the first navigation drawer view on app launch 
    displayView(0); 

} 


@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) { 
    // 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); 
} 

@Override 
public void onDrawerItemSelected(View view, final int position) { 
displayView(position); 

} 

private void displayView(int position) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 
    switch (position) { 
     case 0: 
      fragment = new ContactFragment(); 
      title = getString(R.string.nav_item_contact); 

      break; 
     case 1: 
      fragment = new MyLocation(); 

      title = getString(R.string.nav_item_myloc); 
      break; 

     case 2: 
      fragment = new TermsandCondition(); 
      title = getString(R.string.nav_item_terms); 
      break; 

     case 3: 
      fragment = new UpgradePlan(); 
      title = getString(R.string.nav_item_upgrade); 
      break; 
     case 4: 
      fragment = new Aboutus(); 
      title = getString(R.string.nav_item_about); 


      break; 


     default: 
      break; 
    } 
    if (fragment != null) { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     // fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out,android.R.anim.fade_in,android.R.anim.fade_out); 
     fragmentManager.addOnBackStackChangedListener(null); 
     fragmentTransaction.replace(R.id.container_body, fragment); 
     fragmentTransaction.commit(); 

     // set the toolbar title 
     // actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>")); 
     getSupportActionBar().setTitle(Html.fromHtml("<font color='#000000'>" + title + " </font>")); 
     // final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
     // upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP); 
     // getSupportActionBar().setHomeAsUpIndicator(upArrow); 


    } 
} 
} 
+0

您需要一个用于滑动选项卡的良好示例代码。如果我有机会,我会提供一个链接。 –

+0

你能否给我提供链接 – Ramz

+0

你只想在一个特定片段下滑动标签吗? – Droidwala

回答

0

你必须让你的滑动标签的片段,以便它可以通过其他片段来代替,而不是制作slidetab活动

0

如上所述,您只想显示一个窗口中的选项卡gment那么你应该删除该选项卡主要布局内,直接使用它的片段布局内..

只要保持

drawerlayout> 工具栏>片段[您的片段,其中将包括标签使用fragment.xml之膨胀] > navigationview在mainactivity布局文件

移动你的标签XML代码内的其他fragment.xml之文件

+0

谢谢,实际上如果应用程序开始运行它应该默认显示滑动标签布局(在我的情况下,这是主要活动),然后如果我点击其中一个导航抽屉项目,它应该显示特定片段而不是主要活动。这是可行的,但主要活动与片段的内容重叠。 – Ramz

+0

这就是我所说的填充你的主要活动,但不包括在mainactivity.xml文件中的tablayout ..但只是保持裸露的最小布局,如工具栏+导航抽屉+片段(其内容将按片段显示) – Droidwala

0

下面是谷歌一个很好的网页@SlidingTabsBasic,我一直用它。我相信它会满足您的要求滑动多个标签作为主要用户界面。 MainActivity作为子类从FragmentActivity扩展而来。换句话说,MainActivity可能是一个片段,但我不建议你让示例项目更加复杂,让它简单易行。