ViewPager学习+fragment和activity通信
程序员文章站
2022-06-24 10:05:41
imooc学习笔记FragmentPagerAdapter - 适用于在固定的少量同级屏幕之间进行导航。FragmentStatePagerAdapter 会在用户导航至其他位置时销毁 Fragment,从而优化内存使用情况。...
imooc学习笔记
两个适配器的区别
- 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布局
效果展示:左右滑动切换界面
重新布局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
推荐阅读
-
AndroidX下使用Activity和Fragment的变化详解
-
AndroidX下使用Activity和Fragment的变化详解
-
详解Android activity与fragment之间的通信交互
-
Viewpager+Fragment 跳转Activity报错android.os.TransactionTooLargeException: data parcel size xxxxx bytes
-
Fragment和Activity之间传值的方法
-
Activity之Fragment详解和回退
-
TabLayout和ViewPager、Fragment的滑动页面的实现
-
学习安卓开发[2] - 在Activity中托管Fragment
-
XX的学习日记(网络通信编程)三——C#编程和网络编程入门
-
ViewPager学习+fragment和activity通信