簡體   English   中英

我想在 view-pager,Tabbed activity Android 中為 3 個不同的選項卡顯示 3 個不同的片段

[英]I want to show 3 different fragments for 3 different tabs in view-pager ,Tabbed activity Android

我是 android 的新手,這次我通過觀看視頻教程創建了一個 view-pager 選項卡式活動。 如果用戶滑動 tab1(顯示第一個片段)、tab2(顯示第二個片段)tab3(顯示第三個片段)這樣的位置,則問題或需要顯示 3 個不同的片段現在它顯示所有選項卡的一個且唯一的片段

這是我的適配器類,名為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();
        }

像這樣更改您的 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;
}

您需要創建 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

主要活動

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.

請看這個簡單的完整示例:這里我還使用了 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.主要活動.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 public class Tab1 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.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 {

public VPAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    if(position == 0) return new Tab1();
    if(position == 1) return new Tab2();
    if(position == 2) return new Tab3();

    throw new IllegalStateException("Unexpected position " + position);
}

@Override
public int getCount() {
    return 3;
}
}

用這個:

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);

希望能幫助到你!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM