日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android ViewPager2 真的香么?

發布時間:2025/3/21 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android ViewPager2 真的香么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????Google 前段時間出了新品 ViewPager2,據說意在替代舊版 ViewPager,功能更強大使用更方便;真的這么香么,小菜嘗試學習一下!

優勢

  • 支持 RTL 布局,稍后介紹;
  • 支持垂直方向切換;
  • 支持 Fragment 集合刷新,即 notifyDataSetChanged
  • 版本

    ??????ViewPager2 目前處于預覽版,還沒有合并到主分支,可能還會有一些隱藏小問題,建議大家先嘗試一下;

    implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'

    問題

    ??????小菜嘗試第一步要引入 ViewPager2,而此時就出現一個大問題,如下:

    ??????小菜當前 SDK 已是最新版本,首先按照提示在 AndroidManifest->application 添加錯誤中要求的,但是并不能解決問題,之后查閱了很多資料,發現 AndroidxAndroid support不共存,這可真是麻煩了,如果在實際的項目中直接用可麻煩大了;

    解決

    ??????既然不兼容,只好先轉到 Androidx 庫下,chenzhenlindx大神的博客很有幫助;

  • 工程 -> Refactor -> Migrate to Androidx
  • 提示是否保存以前工程 zip 文件,看個人需求;
  • 按提示 Do Refactor 重構即可;
  • 嘗試

    ??????小菜嘗試綁定不同背景色和文字內容;與 ViewPager 不同的是,適配器需要使用 RecyclerView.Adapte,這也意味著綁定數據的方式更靈活,小菜為了測試 ViewPager2 新特性,設置了點擊事件;

  • 借助 setOrientation() 方法可以動態改變切換方向,水平或豎直;
  • 借助 notifyDataSetChanged() 方法可以實時更新數據;
  • 借助 setLayoutDirection() 方法可以動態調整內容展示方位,從左到右或從右到左;
  • ??????此時感覺 ViewPager2 真的很方便,尤其是實時更新數據和動態調整切換方向,真香!

    public class ViewPagerActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener {private ViewPager2 mVp;private List<Integer> list = new ArrayList<Integer>();private MyAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_view_pager);if (list != null) list.clear();list.add(Color.RED);list.add(Color.GRAY);list.add(Color.BLUE);list.add(Color.YELLOW);mVp = (ViewPager2) findViewById(R.id.view_pager);adapter = new MyAdapter(this, list);mVp.setAdapter(adapter);adapter.setOnItemClickListener(this);}@Overridepublic void onItemClick(int position) {Toast.makeText(getApplication(), "當前position=" + (position + 1), Toast.LENGTH_SHORT).show();switch (position){case 0://mVp.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);break;case 1:list.set(position, Color.GREEN);adapter.notifyDataSetChanged();break;case 2:mVp.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);break;case 3:mVp.setOrientation(ViewPager2.ORIENTATION_VERTICAL);break;}} }class MyAdapter extends RecyclerView.Adapter {Context context;List<Integer> list;MyAdapter(Context context, List<Integer> list) {this.context = context;this.list = list;}private OnItemClickListener mOnItemClickListener;public void setOnItemClickListener(OnItemClickListener onItemClickListener) {this.mOnItemClickListener = onItemClickListener;}public interface OnItemClickListener {void onItemClick(int position);}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view_pager, parent, false);final MyViewHolder mViewHolder = new MyViewHolder(v);v.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mOnItemClickListener != null) {mOnItemClickListener.onItemClick((Integer) v.getTag());if((Integer) v.getTag()==0){mViewHolder.mTv.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);}}}});return mViewHolder;}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {((MyViewHolder) holder).mLay.setBackgroundColor(list.get(position));((MyViewHolder) holder).mTv.setText("當前 position = "+(position+1));((MyViewHolder) holder).itemView.setTag(position);}@Overridepublic int getItemCount() {return list != null ? list.size() : 0;}class MyViewHolder extends RecyclerView.ViewHolder {LinearLayout mLay;TextView mTv;public MyViewHolder(View itemView) {super(itemView);mLay = (LinearLayout) itemView.findViewById(R.id.item_view_pager_lay);mTv = (TextView) itemView.findViewById(R.id.item_view_pager_tv);}} }


    擴展

    ??????小菜以前沒有注意過 supportsRtl 屬性,實際很久以前就有了,根據設置內容居左或居右;

  • 需要 AndroidManifest->application 中添加 android:supportsRtl="true" 屬性;
  • 內邊距和外邊距建議設置 start/end 方式;
  • ViewPager2 中設置 setLayoutDirection 時,整個 ViewPager2 不僅子 item 內容反向,整體也反向;只有子 item 設置 setLayoutDirection 時會反向。
  • 小結

    ??????小菜在學習過程中發現 ViewPager2 確實有很大優勢,只是目前還沒有發布到正式版,而且對于版本適配也會有一定難度,對于 Fragment 的懶加載與預加載還有待研究;但是學習體驗一下還是很有幫助的!


    ??????如果有不對的地方還希望多多指出!

    總結

    以上是生活随笔為你收集整理的Android ViewPager2 真的香么?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。