1

我对android非常新颖,这次我通过查看视频教程创建了一个view-pager选项卡活动。如果用户滑动像tab1(显示第一个片段),tab2(显示第二个片段)tab3(显示第三个片段) 现在它显示所有标签的唯一片段我想在view-pager,Tabbed活动中为3个不同的标签显示3个不同的片段Android

这是我的适配器类,名为datafragment package com.example.jaison.news;

public class datafragment extends Fragment { 
View view; 
ViewPager viewPager; 
TabLayout tabLayout; 


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


    viewPager = (ViewPager) view.findViewById(R.id.viewpager); 
    viewPager.setAdapter(new sliderAdapter(getChildFragmentManager())); 
    tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs); 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    }); 

    return view; 

} 




private class sliderAdapter extends FragmentPagerAdapter{ 

    final String tabs[]={"tab1", "tab2","tab3"}; 
    public sliderAdapter(FragmentManager fm) { 
     super(fm); 
    } 


    @Override 
    public Fragment getItem(int position) { 
     Fragment fragment = null; 

     return fragment; 
    } 


    @Override 
    public int getCount() { 


     return 3; 
    } 
    @Override 
    public CharSequence getPageTitle(int position) { 
     return tabs[position]; 
    } 
} 




} 

对于那些谁没有得到我的观点,我需要的是实现代码的东西就是这样的,但我不知道这..

 switch (position) { 
      case 0: 

       //showing first fragment 


      case 1: 

        //showing second fragment 


      case 2: 
       //showing third fragment 
      default: 
       return new Fragment(); 
     } 
+0

参阅此HTTPS ://www.androidhive.info/2015/09/android-material-design-working-with-tabs/ – MinnuKaAnae

+0

你可以给我一个答案? –

+0

你应该创建3个不同的片段xml文件和3个片段类,按照上面的链接一步一步你会得到解决方案 – MinnuKaAnae

回答

0

改变你的getItem方法是这样

@Override 
public Fragment getItem(int position) { 
    Fragment fragment = null; 
    switch (position){ 
     case 0: 
      fragment = new Tab1Fragment(); 
      break; 
     case 1: 
      fragment = new Tab2Fragment(); 
      break; 
     case 2: 
      fragment = new Tab3Fragment(); 
      break; 
    } 
    return fragment; 
} 
+0

是的,即使这可以工作。 – MadScientist

+0

看到我编辑的问题 –

+0

是这样吗?.............. –

0

使用此:

private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     // adding the fragments here with titles 
     adapter.addFragment(new OneFragment(), "ONE"); 
     adapter.addFragment(new TwoFragment(), "TWO"); 
     adapter.addFragment(new ThreeFragment(), "THREE"); 
     viewPager.setAdapter(adapter); 
    } 

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

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

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

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

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return mFragmentTitleList.get(position); 
      //return null; 
     } 
    } 

然后将其设置是这样的:

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

tabLayout = (TabLayout) view.findViewById(R.id.sliding_tabs); 
tabLayout.setupWithViewPager(viewPager); 

希望它帮助!

0

您需要创建viewPagerAdapter的实例,然后向其中添加项目。 事情是这样的:

ViewPagerAdapter viewpagerAdapter = new ViewPagerAdapter(getChildFragmentManager()); 

viewPager.setAdapter(viewpagerAdapter); 

// then add items to it as you add items to a recyclerview adapter or to any list 

viewpagerAdapter.addFragment(new Fragment1(), "title1"); 

而且自定义代码为viewpager适配器是:

public class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

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

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

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

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

此外,由于你是新的节目,会建议你使用正确的命名法,例如。类的名字总是以首字母大写开头

class ClassName 

void methodName 
0

MainActivity

import android.os.Bundle; 
import android.support.design.widget.TabLayout; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 

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

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

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

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

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

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new OneFragment(), "ONE"); 
    adapter.addFragment(new TwoFragment(), "TWO"); 
    adapter.addFragment(new ThreeFragment(), "THREE"); 
    viewPager.setAdapter(adapter); 
} 

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

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

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

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

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

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

OneFragment.java

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


public class OneFragment extends Fragment{ 

public OneFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_one, container, false); 
} 

} 

fragment_one.xml

<RelativeLayout 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"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/one" 
    android:textSize="40dp" 
    android:textStyle="bold" 
    android:layout_centerInParent="true"/> 

</RelativeLayout> 

Likewise create few more fragment activities with same code we used for OneFragment.java. 
+0

谢谢你的努力,但在这我结合viewpager与导航抽屉 –

+0

按照此https://stackoverflow.com/a/45302902/5594218,设计对于带有标签的导航抽屉 – MinnuKaAnae

+0

非常感谢你......并且我得到了答案 –

0

看到这个简单的完整的例子: 这里我用TabLayout也该经常与ViewPager使用,所以才会对您有用的未来。

它需要API:

compile 'com.android.support:design:25.3.1' 

可以忽略,如果想在这种情况下,以较简单的去从XML和Java文件中删除TabLayout的所有部分。

1. activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/viewPager"/> 

    <android.support.design.widget.TabLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorPrimary" 
     app:tabIndicatorColor="@color/colorPrimaryDark" 
     app:layout_scrollFlags="scroll|enterAlways" 
     android:id="@+id/tabLayout"/> 

</RelativeLayout> 

2.片段Tab1.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="TAB 1" 
    android:id="@+id/textTab1"/> 

</RelativeLayout> 

3.片段Tab2.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="TAB 2" 
    android:id="@+id/textTab2"/> 

</RelativeLayout> 

4.片段Tab3.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:text="TAB 3" 
    android:id="@+id/textSpacerNoTitleab3"/> 

</RelativeLayout> 

5. MainActivity.java

public class MainActivity extends AppCompatActivity 
    implements TabLayout.OnTabSelectedListener, ViewPager.OnPageChangeListener{ 

ViewPager viewPager; 
TabLayout tabLayout; 

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

    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 

    tabLayout.addTab(tabLayout.newTab().setText("Page 1")); 
    tabLayout.addTab(tabLayout.newTab().setText("Page 2")); 
    tabLayout.addTab(tabLayout.newTab().setText("Page 3")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    tabLayout.addOnTabSelectedListener(this); 

    viewPager.setAdapter(new VPAdapter(getSupportFragmentManager())); 
    viewPager.addOnPageChangeListener(this); 
} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    w("onTabSelected(): "+tab.getPosition()); 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 

} 

@Override 
public void onTabReselected(TabLayout.Tab tab) { 

} 

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

} 

@Override 
public void onPageSelected(int position) { 
    w("onPageSelected(): "+position); 
    TabLayout.Tab tab = tabLayout.getTabAt(position); 
    if(tab!=null)tab.select(); 
} 

@Override 
public void onPageScrollStateChanged(int state) { 

} 

void w(String string){ 
    Log.w("MKN",getClass().getSimpleName()+" "+string); 
} 
} 

6.片段类Tab1.java 公共类TAB1延伸片段{

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    return inflater.inflate(R.layout.tab1,container,false); 
} 
} 

7.片段类Tab2.java

public class Tab2 extends Fragment { 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    return inflater.inflate(R.layout.tab2,container,false); 
} 
} 

8.片段类Tab3.java

public class Tab3 extends Fragment { 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 
    return inflater.inflate(R.layout.tab3,container,false); 
} 
} 

9.适配器类VPAdapter.java

public class VPAdapter extends FragmentPagerAdapter { 

Fragment[] tabs = new Fragment[3]; 
public VPAdapter(FragmentManager fm) { 
    super(fm); 
    tabs[0] = new Tab1(); 
    tabs[1] = new Tab2(); 
    tabs[2] = new Tab3(); 
} 

@Override 
public Fragment getItem(int position) { 
    return tabs[position]; 
} 

@Override 
public int getCount() { 
    return 3; 
} 
} 
相关问题