• 高级控件——碎片Fragment——碎片的动态注册


    ======================================================================================================================

    页面布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="5dp">
    
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/vp_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <androidx.viewpager.widget.PagerTabStrip
                android:id="@+id/pts_tab"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
        </androidx.viewpager.widget.ViewPager>
    </LinearLayout>

     

    fragment_dynamic.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <ImageView
            android:id="@+id/iv_pic"
            android:layout_width="match_parent"
            android:layout_height="360dp"
            android:scaleType="fitCenter" />
    
        <TextView
            android:id="@+id/tv_desc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:textColor="@color/black"
            android:textSize="17sp" />
    
    </LinearLayout>

     

    DynamicFragment
    package com.example.myapplication;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    import androidx.fragment.app.Fragment;
    
    public class DynamicFragment extends Fragment
    {
        private static final String TAG = "DynamicFragment";
    
        protected View mView; // 声明一个视图对象
        protected Context mContext; // 声明一个上下文对象
        private int mPosition; // 位置序号
        private int mImageId; // 图片的资源编号
        private String mDesc; // 商品的文字描述
    
        // 获取该碎片的一个实例
        public static DynamicFragment newInstance(int position, int image_id, String desc)
        {
            DynamicFragment fragment = new DynamicFragment(); // 创建该碎片的一个实例
            Bundle bundle = new Bundle(); // 创建一个新包裹
            bundle.putInt("position", position); // 往包裹存入位置序号
            bundle.putInt("image_id", image_id); // 往包裹存入图片的资源编号
            bundle.putString("desc", desc); // 往包裹存入商品的文字描述
            fragment.setArguments(bundle); // 把包裹塞给碎片
            return fragment; // 返回碎片实例
        }
    
        // 创建碎片视图
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
        {
            mContext = getActivity(); // 获取活动页面的上下文
    
            if (getArguments() != null) { // 如果碎片携带有包裹,就打开包裹获取参数信息
                mPosition = getArguments().getInt("position", 0); // 从包裹取出位置序号
                mImageId = getArguments().getInt("image_id", 0); // 从包裹取出图片的资源编号
                mDesc = getArguments().getString("desc"); // 从包裹取出商品的文字描述
            }
    
            // 根据布局文件fragment_dynamic.xml生成视图对象
            mView = inflater.inflate(R.layout.fragment_dynamic, container, false);
            ImageView iv_pic = mView.findViewById(R.id.iv_pic);
            TextView tv_desc = mView.findViewById(R.id.tv_desc);
            iv_pic.setImageResource(mImageId);
            tv_desc.setText(mDesc);
            Log.d(TAG, "onCreateView position=" + mPosition);
    
            return mView; // 返回该碎片的视图对象
        }
    
        @Override
        public void onAttach(Activity activity) { // 把碎片贴到页面上
            super.onAttach(activity);
            Log.d(TAG, "onAttach position=" + mPosition);
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) { // 页面创建
            super.onCreate(savedInstanceState);
            Log.d(TAG, "onCreate position=" + mPosition);
        }
    
        @Override
        public void onDestroy() { // 页面销毁
            super.onDestroy();
            Log.d(TAG, "onDestroy position=" + mPosition);
        }
    
        @Override
        public void onDestroyView() { // 销毁碎片视图
            super.onDestroyView();
            Log.d(TAG, "onDestroyView position=" + mPosition);
        }
    
        @Override
        public void onDetach() { // 把碎片从页面撕下来
            super.onDetach();
            Log.d(TAG, "onDetach position=" + mPosition);
        }
    
        @Override
        public void onPause() { // 页面暂停
            super.onPause();
            Log.d(TAG, "onPause position=" + mPosition);
        }
    
        @Override
        public void onResume() { // 页面恢复
            super.onResume();
            Log.d(TAG, "onResume position=" + mPosition);
        }
    
        @Override
        public void onStart() { // 页面启动
            super.onStart();
            Log.d(TAG, "onStart position=" + mPosition);
        }
    
        @Override
        public void onStop() { // 页面停止
            super.onStop();
            Log.d(TAG, "onStop position=" + mPosition);
        }
    
        @Override
        public void onActivityCreated(Bundle savedInstanceState) { //在活动页面创建之后
            super.onActivityCreated(savedInstanceState);
            Log.d(TAG, "onActivityCreated position=" + mPosition);
        }
    
    }

     

     

     

    MobilePagerAdapter
    package com.example.myapplication;
    
    import androidx.fragment.app.Fragment;
    import androidx.fragment.app.FragmentManager;
    import androidx.fragment.app.FragmentPagerAdapter;
    import java.util.ArrayList;
    import java.util.List;
    
    public class MobilePagerAdapter extends FragmentPagerAdapter
    {
    
        private List<GoodsInfo> mGoodsList = new ArrayList<GoodsInfo>(); // 声明一个商品列表
    
        // 碎片页适配器的构造方法,传入碎片管理器与商品信息列表
        public MobilePagerAdapter(FragmentManager fm, List<GoodsInfo> goodsList)
        {
            super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
            mGoodsList = goodsList;
        }
    
        // 获取碎片Fragment的个数
        public int getCount()
        {
            return mGoodsList.size();
        }
    
        // 获取指定位置的碎片Fragment
        public Fragment getItem(int position)
        {
            return DynamicFragment.newInstance(position, mGoodsList.get(position).pic, mGoodsList.get(position).desc);
        }
    
        // 获得指定碎片页的标题文本
        public CharSequence getPageTitle(int position)
        {
            return mGoodsList.get(position).name;
        }
    }

    MainActivity
    package com.example.myapplication;
    
    import android.graphics.Color;
    import android.os.Bundle;
    import android.util.Log;
    import android.util.TypedValue;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.viewpager.widget.PagerTabStrip;
    import androidx.viewpager.widget.ViewPager;
    
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity
    {
        private static final String TAG = "FragmentDynamicActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            Log.d(TAG, "onCreate");
    
            initPagerStrip(); // 初始化翻页标签栏
            initViewPager(); // 初始化翻页视图
        }
    
        // 初始化翻页标签栏
        private void initPagerStrip()
        {
            // 从布局视图中获取名叫pts_tab的翻页标签栏
            PagerTabStrip pts_tab = findViewById(R.id.pts_tab);
    
            // 设置翻页标签栏的文本大小
            pts_tab.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
    
            // 设置翻页标签栏的文本颜色
            pts_tab.setTextColor(Color.BLACK);
        }
    
        // 初始化翻页视图
        private void initViewPager()
        {
            List<GoodsInfo> goodsList = GoodsInfo.getDefaultList();
            // 构建一个手机商品的碎片翻页适配器
    
            MobilePagerAdapter adapter = new MobilePagerAdapter(getSupportFragmentManager(), goodsList);
    
            // 从布局视图中获取名叫vp_content的翻页视图
            ViewPager vp_content = findViewById(R.id.vp_content);
    
            vp_content.setAdapter(adapter); // 设置翻页视图的适配器
            vp_content.setCurrentItem(0); // 设置翻页视图显示第一页
        }
    
        @Override
        protected void onDestroy()
        {
            super.onDestroy();
            Log.d(TAG, "onDestroy");
        }
    
        @Override
        protected void onStart()
        {
            super.onStart();
            Log.d(TAG, "onStart");
        }
    
        @Override
        protected void onStop()
        {
            super.onStop();
            Log.d(TAG, "onStop");
        }
    
        @Override
        protected void onResume()
        {
            super.onResume();
            Log.d(TAG, "onResume");
        }
    
        @Override
        protected void onPause()
        {
            super.onPause();
            Log.d(TAG, "onPause");
        }
    
    }

     

     

     

     

     

     

     

     

  • 相关阅读:
    JavaEE三层架构
    请求重定向
    响应的中文乱码问题
    Apache的ServerAlias的作用
    bootstrap 常用class
    linux 退出当前命令的编辑
    硬链接和软链接
    ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry ’1′ for key ‘PRIMARY’
    ie浏览器许多图片放在一起会有间隙
    Could not initialize class utils.JdbcUtils
  • 原文地址:https://www.cnblogs.com/xiaobaibailongma/p/16487566.html
Copyright © 2020-2023  润新知