欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

ViewPager学习+fragment和activity通信

程序员文章站 2022-06-24 10:05:41
imooc学习笔记FragmentPagerAdapter - 适用于在固定的少量同级屏幕之间进行导航。FragmentStatePagerAdapter 会在用户导航至其他位置时销毁 Fragment,从而优化内存使用情况。...

imooc学习笔记
ViewPager学习+fragment和activity通信
两个适配器的区别

  • FragmentPagerAdapter - 适用于在固定的少量同级屏幕之间进行导航。
  • FragmentStatePagerAdapter 会在用户导航至其他位置时销毁 Fragment,从而优化内存使用情况。

主活动布局,用viewpager进行布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.viewpager.widget.ViewPager 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/viewpager_main"
    tools:context=".MainActivity">
</androidx.viewpager.widget.ViewPager>

新建fragment_tab.xml布局

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_gravity="center"
        tools:text="微信"
        android:textSize="30dp"
        android:textStyle="bold"
        android:id="@+id/textview_title"
        android:layout_height="wrap_content"/>
</FrameLayout>

新建继承Fragment的TabFragment类

public class TabFragment extends Fragment {

    private static final String BUNDLE_KEY_TITLE = "key_title";

    private TextView TVTitle ;
    private String Title;

    public static TabFragment getInstance(String title){
        Bundle bundle = new Bundle();
        bundle.putString(BUNDLE_KEY_TITLE,title);
        TabFragment tabFragment = new TabFragment();
        //利用Argument,页面销毁还是能获取到title
        tabFragment.setArguments(bundle);
        return  tabFragment;
    }

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

        Bundle argments = getArguments();
        if(argments!=null){
            Title = argments.getString(BUNDLE_KEY_TITLE,"");
        }
    }

    //创建view
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //加载哪个布局(R.layout.fragment_tab),加载到哪(container)
        return inflater.inflate(R.layout.fragment_tab, container,false);
    }

    //view创建完成后,可以用这个方法完成一些初始化操作
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        TVTitle = view.findViewById(R.id.textview_title);
        TVTitle.setText(Title);
    }
}

主活动代码

public class MainActivity extends AppCompatActivity {

    ViewPager vpMain;
    private List<String> Titles = new ArrayList<>(Arrays.asList("微信","通讯录","发现","我的"));

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

        vpMain = (ViewPager) findViewById(R.id.viewpager_main);
        vpMain.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @NonNull
            @Override
            public Fragment getItem(int position) {
                return TabFragment.getInstance(Titles.get(position));
            }

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

到这完成了简单的viewpager布局
效果展示:左右滑动切换界面
ViewPager学习+fragment和activity通信

ViewPager学习+fragment和activity通信

ViewPager学习+fragment和activity通信
重新布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager 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:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:id="@+id/viewpager_main"
        tools:context=".MainActivity">
    </androidx.viewpager.widget.ViewPager>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/btn_wechat"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="微信"
            android:layout_height="match_parent"/>

        <Button
            android:id="@+id/btn_friend"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="通讯录"
            android:layout_height="match_parent"/>

        <Button
            android:id="@+id/btn_find"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="发现"
            android:layout_height="match_parent"/>

        <Button
            android:id="@+id/btn_mine"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="我的"
            android:layout_height="match_parent"/>
    </LinearLayout>

</LinearLayout>

android:layout_weight="1"的意思是除了下面的LinearLayout,其余部分全分给viewpager
需要注意(旋转屏幕/后台被杀死后重新进入程序 会重新创建activity)

本文地址:https://blog.csdn.net/lidian1999/article/details/110206445