ViewPager+布局xml(View)

效果图


ViewPager

<1>引导页
        适配器   PagerAdapter
        滑动监听 addOnPageChangeListener
        导航点   github开源框架:ViewPagerIndicator
                属性:
                setRadius:设置半径
        

ViewPager中可以不使用Fragment,直接使用View。 ### 原理 ViewPager既可以使用Fragment作为页面内容,也可以使用普通的View作为页面内容。使用View时,不需要像使用Fragment那样进行复杂的生命周期管理,直接将View添加到ViewPager的适配器中即可。 ### 实现步骤 1. **布局文件**:在布局文件中添加ViewPager组件。 ```xml <androidx.viewpager.widget.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 2. **创建View**:准备要显示的View,可以通过LayoutInflater从布局文件中加载。 ```java LayoutInflater inflater = LayoutInflater.from(context); View view1 = inflater.inflate(R.layout.view1_layout, null); View view2 = inflater.inflate(R.layout.view2_layout, null); ``` 3. **创建适配器**:自定义一个PagerAdapter,并重写相关方法。 ```java import android.view.View; import android.view.ViewGroup; import androidx.viewpager.widget.PagerAdapter; import java.util.List; public class ViewPagerAdapter extends PagerAdapter { private List<View> viewList; public ViewPagerAdapter(List<View> viewList) { this.viewList = viewList; } @Override public int getCount() { return viewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view = viewList.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } ``` 4. **设置适配器**:将适配器设置给ViewPager。 ```java import androidx.viewpager.widget.ViewPager; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = findViewById(R.id.viewPager); List<View> viewList = new ArrayList<>(); LayoutInflater inflater = LayoutInflater.from(this); View view1 = inflater.inflate(R.layout.view1_layout, null); View view2 = inflater.inflate(R.layout.view2_layout, null); viewList.add(view1); viewList.add(view2); ViewPagerAdapter adapter = new ViewPagerAdapter(viewList); viewPager.setAdapter(adapter); } } ``` ### 优缺点 - **优点**: - 简单直接,不需要处理Fragment的生命周期,减少了代码的复杂度。 - 内存占用相对较少,因为不需要为每个页面创建Fragment实例。 - **缺点**: - 缺乏Fragment的复用性和生命周期管理机制,在处理复杂页面逻辑时可能会比较麻烦。 - 不便于与系统的一些功能(如导航组件)集成。 ### 适用场景 适用于页面数量较少、页面逻辑简单的场景,例如引导页、图片轮播等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值