如何实现在android中包含2个片段的活动左右滑动?

问题描述:

我有一个包含2个片段和两个包含recyclerview的片段的活动。 我需要实现轻扫手势(当我从一侧滑动到另一侧时,需要更改碎片)。 此前我已添加滑动手势,但是当我滑动回收站视图时,将滚动而不是改变碎片。如何实现在android中包含2个片段的活动左右滑动?

你能在执行这一帮助..

感谢

+0

查看指南https://guides.codepath.com/android/google-play-style-tabs-using-tablayout –

使用TabLayout与ViewPager。为活动中的两个片段创建两个选项卡。 http://www.androidhive.info/2015/09/android-material-design-working-with-tabs/

这是你如何做到这一点:

public class YourActivity extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_activity); 

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

    ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager); 
    setupViewPager(viewPager); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.setupWithViewPager(viewPager); 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new FragmentOne(), "Fragment One"); 
    adapter.addFragment(new FragmentTwo(), "Fragment Two"); 
    viewPager.setAdapter(adapter); 
} 

private class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> fragmentList = new ArrayList<>(); 
    private final List<String> fragmentTitleList = new ArrayList<>(); 

    ViewPagerAdapter(FragmentManager fragmentManager) {super(fragmentManager);} 

    @Override 
    public Fragment getItem(int position) {return fragmentList.get(position);} 

    @Override 
    public int getCount() { 
     return fragmentList.size(); 
    } 

    void addFragment(Fragment fragment, String title) { 

     fragmentList.add(fragment); 
     fragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return fragmentTitleList.get(position); 
    } 
} 

}

这是.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:id="@+id/coordinator_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context=".YourActivity"> 

    <android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="8dp" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

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

    <android.support.design.widget.TabLayout 
     android:id="@+id/tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:animateLayoutChanges="true"/> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
    android:id="@+id/view_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

希望它能帮助!

+0

我使用片段而不是活动 – Techgeek

+0

此代码用于包含2个片段的单个活动,在这两个片段之间滑动的可能性。这不是你要求的吗? –

+0

耶谢谢你的回答,但现在我们改变了我们的应用程序的设计,所以它使用片段,并在该片段中包含2个片段。每个片段都包含回收站视图,因此您可以帮助解决这个问题 – Techgeek

刚刚使用Android TabLayout与ViewPager,你的问题就解决了:)

只需使用Tablayout和ViewPager

下面的代码: -

public class DispatchOrderTab extends Fragment { 
    public static TabLayout tabLayout; 
    public static ViewPager viewPager; 
    public static int int_items = 2 ; 
    android.support.v4.app.FragmentManager mFragmentManager; 

    View view; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     getActivity().setTitle("Order"); 

     View x = inflater.inflate(R.layout.activity_dispatch_order_tab,null); 
     tabLayout = (TabLayout) x.findViewById(R.id.sliding_tabs_dispatchtoken); 
     viewPager = (ViewPager) x.findViewById(R.id.viewpagerdispatchtoken); 
     viewPager. setOffscreenPageLimit(2); 
     viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 



     tabLayout.setupWithViewPager(viewPager); 


     return x; 

    } 
    class MyAdapter extends FragmentPagerAdapter { 
     Order order; 
     Home home; 
     public MyAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     /** 
     * Return fragment with respect to Position . 
     */ 

     @Override 
     public Fragment getItem(int position) 
     { 
      switch (position){ 
        //Here u can put your fragment files for swipe 
       case 0 : return new Dispatchorder(); 
       case 1 : return new DispatchOrderTokenComplete(); 
      } 
      return null; 
     } 

     @Override 
     public int getCount() { 

      return int_items; 

     } 

     /** 
     * This method returns the title of the tab according to the position. 
     */ 

     @Override 
     public CharSequence getPageTitle(int position) { 

      switch (position){ 
       case 0 : 
        //Here you can put the name of tabs. 
        return "Pending Order"; 
       case 1 : 
        return "Complete Order"; 
      } 
      return null; 
     } 
    } 

} 

这里的xml: -

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.Weal.sachin.omcom.TabFragment" 
    android:orientation="vertical"> 
    <android.support.design.widget.TabLayout 
     android:id="@+id/sliding_tabs_dispatchtoken" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:background="#11977c" 
     app:tabTextColor="#d2cece" 
     app:tabSelectedTextColor="#fff" 
     /> 
    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewpagerdispatchtoken" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/white"> 
      android:background="@color/white"> 
      <FrameLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:id="@+id/framelayout1"></FrameLayout> 
     </android.support.v4.view.ViewPager> 

    </android.support.design.widget.CoordinatorLayout> 
</LinearLayout> 

希望这会帮助你... :)