Android——viewpage2+tablayout+fragment动态添加删除

这篇具有很好参考价值的文章主要介绍了Android——viewpage2+tablayout+fragment动态添加删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介:

1、添加和删除按钮可动态添加删减tab页面

2、获取每个fragment数据页上的数据

3、为每个数据页赋值

二、 效果图:

viewpager2 动态添加,tablayout,viewpage,fragment,android,android studio,java,Powered by 金山文档

三、实现:

  1. 主要功能实现:(ViewPage2Fragment.java

先初始化适配器

viewpager2 动态添加,tablayout,viewpage,fragment,android,android studio,java,Powered by 金山文档
// 加载自定义的布局文件
view = inflater.inflate(R.layout.activity_viewpage2_plan_filling_upload, null);
tabLayoutUp = view.findViewById(R.id.tab_layout);
viewPagerUp = view.findViewById(R.id.view_pager);
delImage = view.findViewById(R.id.delete);
addImage = view.findViewById(R.id.add);
lastPlan = view.findViewById(R.id.lastPlan);
tvProName = view.findViewById(R.id.tv_pro_name);
tvTime = view.findViewById(R.id.tv_time);
Button upload = view.findViewById(R.id.upload);
tabLayoutUp.setTabMode(MODE_SCROLLABLE);//适合很多tab
//tabLayoutUp.setTabMode(MODE_FIXED);//tab均分,适合少的tab
tabLayoutUp.addOnTabSelectedListener(this);
viewPagerUp.setAdapter(mAdapter);
// 设置缓存的数量
viewPagerUp.setOffscreenPageLimit(1);
new TabLayoutMediator(tabLayoutUp, viewPagerUp, (tab, position) -> tab.setText(mAdapter.getPageTitle(position))).attach();
//初始化生成第一个页面
refreshAdapter(true);
//此处只删除最后一个页面
delImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int count = mAdapter.getItemCount();
        mAdapter.removeFragment(count - 1);
        mAdapter.notifyDataSetChanged();
    }
});
//添加页面
addImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int count = mAdapter.getItemCount();
        mAdapter.addFragment(count, ViewPage2DataFragment.newInstance(count + ""), (count + 1) + "");
        mAdapter.notifyDataSetChanged();
    }
});
//计划名称
tvProName.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showSimpleBottomSheetList();
    }
});
//时间选择
tvTime.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showDatePicker();
    }
});
//导入上次计划
lastPlan.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        getLastPlan();
    }
});
upload.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        List<PlanBean> listBean = new ArrayList<>();
        //获取fragment数据页的数量
        int count = mAdapter.getItemCount();
        if (count > 0) {
            if (StringHelper.isEmptyAndNull(tvProName.getText().toString())) {
                XToastUtils.error("计划名称为空,请填写!");
                return;
            } else if (StringHelper.isEmptyAndNull(tvTime.getText().toString())) {
                XToastUtils.error("时间为空,请填写!");
                return;
            }
            for (int i = 0; i < count; i++) {
                //遍历获取每个fragment数据页
                ViewPage2DataFragment st = (ViewPage2DataFragment) mAdapter.createFragment(i);
                //调用数据页的方法得到数据放在listBean中  getData方法在ViewPage2DataFragment中
                listBean.add(st.getData());
            }
            for (int j = 0; j < listBean.size(); j++) {
                listBean.get(j).setProName(proNameId);
                listBean.get(j).setMonth(tvTime.getText().toString());
                if (StringHelper.isEmptyAndNull(listBean.get(j).getZynr())) {
                    XToastUtils.error("第" + (j + 1) + "页数据一内容为空,请填写!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getFxdj())) {
                    XToastUtils.error("第" + (j + 1) + "页数据二内容为空,请填写!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getTdsj())) {
                    XToastUtils.error("第" + (j + 1) + "页数据三内容为空,请填写!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getTdsb())) {
                    XToastUtils.error("第" + (j + 1) + "页数据四内容为空,请填写!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getSsgdj())) {
                    XToastUtils.error("第" + (j + 1) + "页数据五内容为空,请填写!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getFzr())) {
                    XToastUtils.error("第" + (j + 1) + "页数据六内容为空,请填写!");
                    return;
                }
            }
            //提交方法  listBean里为页面上的数据
            upData(listBean);
        } else {
            XToastUtils.error("未获取到数据,请添加数据后再提交!");
        }
    }
});




/**
 * 导入上次计划
 * 接口数据已注释,此处为固定假数据,实际环境根据接口返回数据显示
 */
private void getLastPlan() {
//        String url ="接口url";
//        FormBody body = new FormBody.Builder()
//                .build();
//        String result = service.httpPost(url,body);
//        if(!StringHelper.isEmptyAndNull(result)){
//            try {
//                org.json.JSONObject jsonObject = new org.json.JSONObject(result);
//                String res = jsonObject.getString("res");
//                if("0".equals(res)){
//                    XToastUtils.error("获取失败!");
//                }else{
//                    JSONArray jsonArray = jsonObject.getJSONArray("obj");

                //将当前页面上的fragment数据页全部删除
                mAdapter.removeFragmentAll();
                //刷新
                mAdapter.notifyDataSetChanged();
                ViewPage2DataFragment viewPage2DataFragment=new ViewPage2DataFragment();
                for (int i = 0; i < 2; i++) {
                    PlanBean bean = new PlanBean();
//                        JSONObject js = jsonArray.getJSONObject(i);
//                        bean.setZynr(js.getString("zynr"));
                    bean.setZynr("数据一一一");
                    bean.setFxdj("数据二二二");
                    bean.setTdsj("数据三三三");
                    bean.setTdsb("数据四四四");
                    bean.setSsgdj("数据五五五");
                    bean.setFzr("数据六六六");
                    bean.setBz("备注备注");
                    //添加页面  bean则为要显示到页面上的数据
                    mAdapter.addFragment(i, viewPage2DataFragment.newInstances((i+1)+"",bean), (i+1)+"");
                    //刷新
                    mAdapter.notifyDataSetChanged();
                    //制定初始化的页面  0则为制定第一个页面为当前页面
                    viewPager.setCurrentItem(0, false);
                }
//                }
//            } catch (JSONException e) {
//                XToastUtils.error("解析异常,请重试!");
//            }
//        }
}

/**
 * 计划名称列表
 */
private void showSimpleBottomSheetList() {
    new BottomSheet.BottomListSheetBuilder(getActivity())
            .setTitle("计划名称")
            .addItem("aaaa")
            .addItem("bbbb")
            .addItem("cccc")
            .addItem("dddd")
            .setIsCenter(true)
            .setOnSheetItemClickListener((dialog, itemView, position, tag) -> {
                dialog.dismiss();
                tvProName.setText(tag);
            })
            .build()
            .show();
}

/**
 * 时间选择器
 */
private void showDatePicker() {
    if (mDatePicker == null) {
        mDatePicker = new TimePickerBuilder(getContext(), (date, v) -> tvTime.setText(DateUtils.date2String(date, DateUtils.yyyyMMdd.get())))
                .setTimeSelectChangeListener(date -> Log.i("pvTime", "onTimeSelectChanged"))
                .setTitleText("日期选择")
                .build();
    }
    mDatePicker.show();
}

/**
 * 保存提交数据
 */
private void upData(List<PlanBean> listBean) {
    //提交数据
}


/**
 * 生成第一个页面
 */
private void refreshAdapter(boolean isShow) {
    if (viewPagerUp == null) {
        return;
    }
    if (isShow) {
        // 动态加载选项卡内容
        mAdapter.addFragment(ViewPage2DataFragment.newInstance("1"), "1");
        mAdapter.notifyDataSetChanged();
        viewPagerUp.setCurrentItem(0, false);
        WidgetUtils.setTabLayoutTextFont(tabLayoutUp);
    } else {
        mAdapter.clear();
    }
}
  1. frament数据页(ViewPage2DataFragment.java)

public class ViewPage2DataFragment extends Fragment {
    private static final String KEY_TITLE = "title";
    public ViewPage2DataFragment viewPage2DataFragment;
    @BindView(R.id.zynr)
    EditText zynr;
    @BindView(R.id.fxdj)
    TextView fxdj;
    @BindView(R.id.tdsj)
    EditText tdsj;
    @BindView(R.id.tdsb)
    EditText tdsb;
    @BindView(R.id.ssgdj)
    EditText ssgdj;
    @BindView(R.id.fzr)
    EditText fzr;
    @BindView(R.id.bz)
    EditText bz;
    private Unbinder mUnbinder;
    @AutoWired(name = KEY_TITLE)
    String title;
    public static ViewPage2DataFragment instance;

    public ViewPage2DataFragment() {
    }

    public static ViewPage2DataFragment newInstance(String title) {
        Bundle args = new Bundle();
        args.putString(KEY_TITLE, title);
        ViewPage2DataFragment fragment = new ViewPage2DataFragment();
        fragment.setArguments(args);
        return fragment;
    }

    /**
     * bean为生成页面时传来的数据,先存在Budle中,在下面的方法中取
     */
    public ViewPage2DataFragment newInstances(String title, PlanBean bean) {
        Bundle args = new Bundle();
        args.putString(KEY_TITLE, title);
        args.putString("zynr", bean.getZynr());
        args.putString("fxdj", bean.getFxdj());
        args.putString("tdsj", bean.getTdsj());
        args.putString("tdsb", bean.getTdsb());
        args.putString("ssgdj", bean.getSsgdj());
        args.putString("fzr", bean.getFzr());
        args.putString("bz", bean.getBz());
        ViewPage2DataFragment fragment = new ViewPage2DataFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        XRouter.getInstance().inject(this);
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_viewpage2_plan_filling_tab_data, container, false);
        mUnbinder = ButterKnife.bind(this, view);
        instance = this;
        initClick();
        initData();
        return view;
    }

    private void initClick() {
        fxdj.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new BottomSheet.BottomListSheetBuilder(getActivity())
                        .setTitle("计划名称")
                        .addItem("aaaa")
                        .addItem("bbbb")
                        .addItem("cccc")
                        .addItem("dddd")
                        .setIsCenter(true)
                        .setOnSheetItemClickListener((dialog, itemView, position, tag) -> {
                            dialog.dismiss();
                            fxdj.setText(tag);
                        })
                        .build()
                        .show();
            }
        });
    }


    /**
     * 初始化数据,取Bundle中的数据显示到页面
     */
    private void initData() {
        Bundle bundle = getArguments();
        String zynr1 = bundle.getString("zynr");
        String fxdj1 = bundle.getString("fxdj");
        String tdsj1 = bundle.getString("tdsj");
        String tdsb1 = bundle.getString("tdsb");
        String ssgdj1 = bundle.getString("ssgdj");
        String fzr1 = bundle.getString("fzr");
        String bz1 = bundle.getString("bz");

        zynr.setText(zynr1);
        fxdj.setText(fxdj1);
        tdsj.setText(tdsj1);
        tdsb.setText(tdsb1);
        ssgdj.setText(ssgdj1);
        fzr.setText(fzr1);
        bz.setText(bz1);
    }


    /**
     * 获取页面上的数据
     */
    public PlanBean getData() {
        PlanBean bean = new PlanBean();
        String zynr1 = zynr.getText().toString();
        String fxdj1 = fxdj.getText().toString();
        String tdsj1 = tdsj.getText().toString();
        String tdsb1 = tdsb.getText().toString();
        String ssgdj1 = ssgdj.getText().toString();
        String fzr1 = fzr.getText().toString();
        String bz1 = bz.getText().toString();
        bean.setZynr(zynr1);
        bean.setFxdj(fxdj1);
        bean.setTdsj(tdsj1);
        bean.setTdsb(tdsb1);
        bean.setSsgdj(ssgdj1);
        bean.setFzr(fzr1);
        bean.setBz(bz1);
        return bean;
    }

    @Override
    public void onDestroyView() {
        if (mUnbinder != null) {
            mUnbinder.unbind();
        }
        super.onDestroyView();
    }
}
  1. 适配器(FragmentStateViewPager2Adapter.java)

public class FragmentStateViewPager2Adapter extends FragmentStateAdapter {

    private List<Fragment> mFragmentList = new ArrayList<>();

    private List<String> mTitleList = new ArrayList<>();

    private List<Long> mIds = new ArrayList<>();

    private AtomicLong mAtomicLong = new AtomicLong(0);


    public FragmentStateViewPager2Adapter(@NonNull Fragment fragment) {
        super(fragment);
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return mFragmentList.get(position);
    }

    public FragmentStateViewPager2Adapter addFragment(Fragment fragment, String title) {
        if (fragment != null) {
            mFragmentList.add(fragment);
            mTitleList.add(title);
            mIds.add(getAtomicGeneratedId());
        }
        return this;
    }

    /**
     * 添加
     */
    public FragmentStateViewPager2Adapter addFragment(int index, Fragment fragment, String title) {
        if (fragment != null && index >= 0 && index <= mFragmentList.size()) {
            mFragmentList.add(index, fragment);
            mTitleList.add(index, title);
            mIds.add(index, getAtomicGeneratedId());
        }
        return this;
    }


    /**
     * 删除
     */
    public FragmentStateViewPager2Adapter removeFragment(int index) {
        if (index >= 0 && index < mFragmentList.size()) {
            mFragmentList.remove(index);
            mTitleList.remove(index);
            mIds.remove(index);
        }
        return this;
    }

    /**
     * 删除所有
     */
    public FragmentStateViewPager2Adapter removeFragmentAll() {
        mFragmentList.clear();
        mTitleList.clear();
        mIds.clear();
        return this;
    }

    private long getAtomicGeneratedId() {
        return mAtomicLong.incrementAndGet();
    }

    @Override
    public int getItemCount() {
        return mFragmentList.size();
    }

    public void clear() {
        mFragmentList.clear();
        mTitleList.clear();
        mIds.clear();
        notifyDataSetChanged();
    }

    public CharSequence getPageTitle(int position) {
        return mTitleList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return mIds.get(position);
    }

    @Override
    public boolean containsItem(long itemId) {
        return mIds.contains(itemId);
    }
}
  1. 主布局(activity_viewpage2_plan_filling_upload.xml)

( 注:这里为了减少代码量,删除了计划名称、选择时间、导入计划、保存提交的布局)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#efefef"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="#F7F7F7"
        android:orientation="horizontal">

        <View
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="0.9" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.6"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/delete"
                android:layout_width="25dp"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:src="@drawable/delete" />
        </LinearLayout>

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            style="@style/TabLayoutStyle"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="2" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.6"
            android:orientation="vertical">

            <ImageView
                android:id="@+id/add"
                android:layout_width="25dp"
                android:layout_height="match_parent"
                android:layout_gravity="center"
                android:src="@drawable/add" />
        </LinearLayout>

        <View
            android:layout_width="0dp"
            android:layout_height="1dp"
            android:layout_weight="0.9" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <androidx.viewpager2.widget.ViewPager2
                android:id="@+id/view_pager"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="5" />

        </LinearLayout>
    </LinearLayout>
</LinearLayout>
  1. 数据页布局(fragment_viewpage2_plan_filling_tab_data.xml)

注:这里为了减少代码量,删除了数据二、数据三等下面的布局,都是重复的布局,只是id不同)文章来源地址https://www.toymoban.com/news/detail-599696.html

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#efefef"
    android:gravity="center"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="8dp"
        android:orientation="vertical">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/write"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_margin="5dp"
                    android:orientation="vertical">

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="horizontal">

                        <TextView
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="0.1"
                            android:text="*"
                            android:textColor="@color/red"
                            android:textSize="14sp"
                            android:textStyle="bold" />

                        <TextView
                            android:layout_width="0dp"
                            android:layout_height="match_parent"
                            android:layout_weight="2.5"
                            android:text="数据一"
                            android:textColor="#303133"
                            android:textSize="14sp"
                            android:textStyle="bold" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginTop="3dp"
                        android:orientation="horizontal">

                        <EditText
                            android:id="@+id/zynr"
                            android:layout_width="0dp"
                            android:layout_height="wrap_content"
                            android:layout_marginLeft="14dp"
                            android:layout_weight="1.1"
                            android:background="@drawable/bg_edittext"
                            android:gravity="center_vertical"
                            android:hint="请填写"
                            android:inputType="textMultiLine"
                            android:textSize="14sp"
                            android:textStyle="bold" />

                        <TextView
                            android:layout_width="32dp"
                            android:layout_height="match_parent" />
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>
        </ScrollView>
    </LinearLayout>
</LinearLayout>

到了这里,关于Android——viewpage2+tablayout+fragment动态添加删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android kotlin 实现仿蜜源ViewPager和指示器对应上面TabLayout功能

    在 app 的 build.gradle 在添加以下代码 1、 TabLayout : implementation \\\'com.google.android.material:material:1.1.0\\\' 2、 implementation \\\'com.github.li-xiaojun:StateLayout:1.3.4\\\' //allprojects {…增加:maven { url ‘https://jitpack.io’ }…} 3、 implementation \\\'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6\\\' ,这个里面带的适配

    2024年02月09日
    浏览(74)
  • Android开发:利用Android Studio自带的底部导航栏和ViewPager+TabLayout创建顶部导航栏

    目录 效果图 底部导航栏 ​编辑 顶部导航栏 底部导航栏首个Fragment代码 适配器代码 顶部导航栏首个Fragment代码  顶部导航栏另外三个Fragment代码  ​编辑 顶部导航栏四个Fragment的XML 补充 学Android开发开始实操,第一步肯定要把大致布局搞定。做这个布局用到的知识难点有fr

    2024年02月03日
    浏览(60)
  • Android ViewPager2 + Fragment 联动

    本篇主要介绍一下 ViewPager2 + Fragment , 上篇中简单使用了ViewPager2 实现了一个图片的滑动效果, 那图片视图可以滑动, ViewPager2也可以滑动 Fragment 概述 ViewPager2 官方对它的描述就是 以可滑动的格式显示视图或 Fragment 也就说明提供了滑动Fragment的实现 并且还很简单, 下面来看看吧

    2023年04月08日
    浏览(44)
  • Android性能优化—ViewPagers + Fragment缓存优化

    大家看标题,可能会有点儿懵,什么是ViewPagers,因为在很久之前,我们使用的都是ViewPager,但是现在更多的是在用ViewPager2,因此用ViewPagers(ViewPager、ViewPager2)来代替两者,主要介绍两者的区别。 ViewPagers嵌套Fragment架构,在我们常用的App中随处可见,抖音的首页、各大电商

    2024年02月01日
    浏览(59)
  • 『Android基础入门』ViewPager+Fragment+BottomNavigationView实现底部导航

    👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟 🏡个人主页:starry陆离 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 在ViewPager与Fragment结合实现多页面滑动的学习上再进一步,记录一下ViewPager+Fragment+BottomNavigationView实现底部导航 1.复习ViewPager的用法 2.复习F

    2023年04月08日
    浏览(47)
  • ViewPager2+TabLayout

    ViewPager2最显著的特点是基于RecyclerView实现,RecyclerView是目前Android端最成熟的AdapterView解决方案,这带来诸多好处: 1、抛弃传统的PagerAdapter,统一了Adapter的API/ 2、通过LinearLayoutManager可以实现类似抖音的纵向滑动 3、支持DiffUitl,可以通过diff实现局部刷新 4、支持RTL(right-to-

    2023年04月19日
    浏览(41)
  • ViewPager2与TabLayout的简单使用

    ViewPager2与TabLayout的简单使用 MainActivity.java activity_main.xml ViewPagerAdapter.java ShowBigIdBean.java item_img.xml item_icon_layout.xml item_circle_shape.xml

    2024年02月12日
    浏览(38)
  • Android10 Settings系列(三)根据需求动态添加删除一级菜单、二级菜单的设置项

    当时遇到定制需求,需要根据实际需要隐藏Settings的菜单项,于是开始了寻找方法 在看了一下源码,经过尝试后,确认生效后,就简单说明一下Settings中布局中主要组成元素 Settings中的菜单项是由 PreferenceScreen 和Preference组成的。其中PreferenceScreen 类似于我们平常使用布局中的

    2024年02月14日
    浏览(59)
  • ViewPager+ Fragment结合的setUserVisibleHint()调用时机

    最近的项目使用到了 ViewPager + Fragment 的模式,要求在每次 Fragment 获取显示的时候来刷新数据,该项目下 ViewPager 有5个子fragment,在onCreateView及fragment的**setUserVisibleHint(bool isVisibleToUser)**中的isVisibleToUser为true的时候刷新数据的时候出现数据多次刷新的情况,因此对ViewPage + Fr

    2024年02月11日
    浏览(38)
  • Android studio心得——fragment动态加载

    在Android应用程序中,Fragment是一种可以嵌入Activity中的组件。通过 Fragment,我们可以将UI 目录 前言 一、什么是Android Studio 二、简介Fragment 三、学期知识汇总 四、什么是碎片(Fragment) 五、页面实现步骤 1.程序APP主界面的常用例子 2.定义4个Fragment 3.activity_main.xml代码展示 4.四个

    2024年02月09日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包