国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android——viewpage2+tablayout+fragment動(dòng)態(tài)添加刪除

這篇具有很好參考價(jià)值的文章主要介紹了Android——viewpage2+tablayout+fragment動(dòng)態(tài)添加刪除。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、簡(jiǎn)介:

1、添加和刪除按鈕可動(dòng)態(tài)添加刪減tab頁(yè)面

2、獲取每個(gè)fragment數(shù)據(jù)頁(yè)上的數(shù)據(jù)

3、為每個(gè)數(shù)據(jù)頁(yè)賦值

二、 效果圖:

viewpager2 動(dòng)態(tài)添加,tablayout,viewpage,fragment,android,android studio,java,Powered by 金山文檔

三、實(shí)現(xiàn):

  1. 主要功能實(shí)現(xiàn):(ViewPage2Fragment.java

先初始化適配器

viewpager2 動(dòng)態(tài)添加,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);
// 設(shè)置緩存的數(shù)量
viewPagerUp.setOffscreenPageLimit(1);
new TabLayoutMediator(tabLayoutUp, viewPagerUp, (tab, position) -> tab.setText(mAdapter.getPageTitle(position))).attach();
//初始化生成第一個(gè)頁(yè)面
refreshAdapter(true);
//此處只刪除最后一個(gè)頁(yè)面
delImage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int count = mAdapter.getItemCount();
        mAdapter.removeFragment(count - 1);
        mAdapter.notifyDataSetChanged();
    }
});
//添加頁(yè)面
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();
    }
});
//計(jì)劃名稱(chēng)
tvProName.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showSimpleBottomSheetList();
    }
});
//時(shí)間選擇
tvTime.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        showDatePicker();
    }
});
//導(dǎo)入上次計(jì)劃
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數(shù)據(jù)頁(yè)的數(shù)量
        int count = mAdapter.getItemCount();
        if (count > 0) {
            if (StringHelper.isEmptyAndNull(tvProName.getText().toString())) {
                XToastUtils.error("計(jì)劃名稱(chēng)為空,請(qǐng)?zhí)顚?xiě)!");
                return;
            } else if (StringHelper.isEmptyAndNull(tvTime.getText().toString())) {
                XToastUtils.error("時(shí)間為空,請(qǐng)?zhí)顚?xiě)!");
                return;
            }
            for (int i = 0; i < count; i++) {
                //遍歷獲取每個(gè)fragment數(shù)據(jù)頁(yè)
                ViewPage2DataFragment st = (ViewPage2DataFragment) mAdapter.createFragment(i);
                //調(diào)用數(shù)據(jù)頁(yè)的方法得到數(shù)據(jù)放在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) + "頁(yè)數(shù)據(jù)一內(nèi)容為空,請(qǐng)?zhí)顚?xiě)!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getFxdj())) {
                    XToastUtils.error("第" + (j + 1) + "頁(yè)數(shù)據(jù)二內(nèi)容為空,請(qǐng)?zhí)顚?xiě)!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getTdsj())) {
                    XToastUtils.error("第" + (j + 1) + "頁(yè)數(shù)據(jù)三內(nèi)容為空,請(qǐng)?zhí)顚?xiě)!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getTdsb())) {
                    XToastUtils.error("第" + (j + 1) + "頁(yè)數(shù)據(jù)四內(nèi)容為空,請(qǐng)?zhí)顚?xiě)!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getSsgdj())) {
                    XToastUtils.error("第" + (j + 1) + "頁(yè)數(shù)據(jù)五內(nèi)容為空,請(qǐng)?zhí)顚?xiě)!");
                    return;
                } else if (StringHelper.isEmptyAndNull(listBean.get(j).getFzr())) {
                    XToastUtils.error("第" + (j + 1) + "頁(yè)數(shù)據(jù)六內(nèi)容為空,請(qǐng)?zhí)顚?xiě)!");
                    return;
                }
            }
            //提交方法  listBean里為頁(yè)面上的數(shù)據(jù)
            upData(listBean);
        } else {
            XToastUtils.error("未獲取到數(shù)據(jù),請(qǐng)?zhí)砑訑?shù)據(jù)后再提交!");
        }
    }
});




/**
 * 導(dǎo)入上次計(jì)劃
 * 接口數(shù)據(jù)已注釋?zhuān)颂帪楣潭贁?shù)據(jù),實(shí)際環(huán)境根據(jù)接口返回?cái)?shù)據(jù)顯示
 */
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");

                //將當(dāng)前頁(yè)面上的fragment數(shù)據(jù)頁(yè)全部刪除
                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("數(shù)據(jù)一一一");
                    bean.setFxdj("數(shù)據(jù)二二二");
                    bean.setTdsj("數(shù)據(jù)三三三");
                    bean.setTdsb("數(shù)據(jù)四四四");
                    bean.setSsgdj("數(shù)據(jù)五五五");
                    bean.setFzr("數(shù)據(jù)六六六");
                    bean.setBz("備注備注");
                    //添加頁(yè)面  bean則為要顯示到頁(yè)面上的數(shù)據(jù)
                    mAdapter.addFragment(i, viewPage2DataFragment.newInstances((i+1)+"",bean), (i+1)+"");
                    //刷新
                    mAdapter.notifyDataSetChanged();
                    //制定初始化的頁(yè)面  0則為制定第一個(gè)頁(yè)面為當(dāng)前頁(yè)面
                    viewPager.setCurrentItem(0, false);
                }
//                }
//            } catch (JSONException e) {
//                XToastUtils.error("解析異常,請(qǐng)重試!");
//            }
//        }
}

/**
 * 計(jì)劃名稱(chēng)列表
 */
private void showSimpleBottomSheetList() {
    new BottomSheet.BottomListSheetBuilder(getActivity())
            .setTitle("計(jì)劃名稱(chēng)")
            .addItem("aaaa")
            .addItem("bbbb")
            .addItem("cccc")
            .addItem("dddd")
            .setIsCenter(true)
            .setOnSheetItemClickListener((dialog, itemView, position, tag) -> {
                dialog.dismiss();
                tvProName.setText(tag);
            })
            .build()
            .show();
}

/**
 * 時(shí)間選擇器
 */
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();
}

/**
 * 保存提交數(shù)據(jù)
 */
private void upData(List<PlanBean> listBean) {
    //提交數(shù)據(jù)
}


/**
 * 生成第一個(gè)頁(yè)面
 */
private void refreshAdapter(boolean isShow) {
    if (viewPagerUp == null) {
        return;
    }
    if (isShow) {
        // 動(dòng)態(tài)加載選項(xiàng)卡內(nèi)容
        mAdapter.addFragment(ViewPage2DataFragment.newInstance("1"), "1");
        mAdapter.notifyDataSetChanged();
        viewPagerUp.setCurrentItem(0, false);
        WidgetUtils.setTabLayoutTextFont(tabLayoutUp);
    } else {
        mAdapter.clear();
    }
}
  1. frament數(shù)據(jù)頁(yè)(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為生成頁(yè)面時(shí)傳來(lái)的數(shù)據(jù),先存在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("計(jì)劃名稱(chēng)")
                        .addItem("aaaa")
                        .addItem("bbbb")
                        .addItem("cccc")
                        .addItem("dddd")
                        .setIsCenter(true)
                        .setOnSheetItemClickListener((dialog, itemView, position, tag) -> {
                            dialog.dismiss();
                            fxdj.setText(tag);
                        })
                        .build()
                        .show();
            }
        });
    }


    /**
     * 初始化數(shù)據(jù),取Bundle中的數(shù)據(jù)顯示到頁(yè)面
     */
    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);
    }


    /**
     * 獲取頁(yè)面上的數(shù)據(jù)
     */
    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)

( 注:這里為了減少代碼量,刪除了計(jì)劃名稱(chēng)、選擇時(shí)間、導(dǎo)入計(jì)劃、保存提交的布局)

<?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. 數(shù)據(jù)頁(yè)布局(fragment_viewpage2_plan_filling_tab_data.xml)

注:這里為了減少代碼量,刪除了數(shù)據(jù)二、數(shù)據(jù)三等下面的布局,都是重復(fù)的布局,只是id不同)文章來(lái)源地址http://www.zghlxwxcb.cn/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="數(shù)據(jù)一"
                            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="請(qǐng)?zhí)顚?xiě)"
                            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>

到了這里,關(guān)于Android——viewpage2+tablayout+fragment動(dòng)態(tài)添加刪除的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android kotlin 實(shí)現(xiàn)仿蜜源ViewPager和指示器對(duì)應(yīng)上面TabLayout功能

    Android kotlin 實(shí)現(xiàn)仿蜜源ViewPager和指示器對(duì)應(yīng)上面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\\\' ,這個(gè)里面帶的適配

    2024年02月09日
    瀏覽(22)
  • Android開(kāi)發(fā):利用Android Studio自帶的底部導(dǎo)航欄和ViewPager+TabLayout創(chuàng)建頂部導(dǎo)航欄

    Android開(kāi)發(fā):利用Android Studio自帶的底部導(dǎo)航欄和ViewPager+TabLayout創(chuàng)建頂部導(dǎo)航欄

    目錄 效果圖 底部導(dǎo)航欄 ?編輯 頂部導(dǎo)航欄 底部導(dǎo)航欄首個(gè)Fragment代碼 適配器代碼 頂部導(dǎo)航欄首個(gè)Fragment代碼 ?頂部導(dǎo)航欄另外三個(gè)Fragment代碼 ??編輯 頂部導(dǎo)航欄四個(gè)Fragment的XML 補(bǔ)充 學(xué)Android開(kāi)發(fā)開(kāi)始實(shí)操,第一步肯定要把大致布局搞定。做這個(gè)布局用到的知識(shí)難點(diǎn)有fr

    2024年02月03日
    瀏覽(33)
  • Android ViewPager2 + Fragment 聯(lián)動(dòng)

    Android ViewPager2 + Fragment 聯(lián)動(dòng)

    本篇主要介紹一下 ViewPager2 + Fragment , 上篇中簡(jiǎn)單使用了ViewPager2 實(shí)現(xiàn)了一個(gè)圖片的滑動(dòng)效果, 那圖片視圖可以滑動(dòng), ViewPager2也可以滑動(dòng) Fragment 概述 ViewPager2 官方對(duì)它的描述就是 以可滑動(dòng)的格式顯示視圖或 Fragment 也就說(shuō)明提供了滑動(dòng)Fragment的實(shí)現(xiàn) 并且還很簡(jiǎn)單, 下面來(lái)看看吧

    2023年04月08日
    瀏覽(26)
  • Android性能優(yōu)化—ViewPagers + Fragment緩存優(yōu)化

    Android性能優(yōu)化—ViewPagers + Fragment緩存優(yōu)化

    大家看標(biāo)題,可能會(huì)有點(diǎn)兒懵,什么是ViewPagers,因?yàn)樵诤芫弥?,我們使用的都是ViewPager,但是現(xiàn)在更多的是在用ViewPager2,因此用ViewPagers(ViewPager、ViewPager2)來(lái)代替兩者,主要介紹兩者的區(qū)別。 ViewPagers嵌套Fragment架構(gòu),在我們常用的App中隨處可見(jiàn),抖音的首頁(yè)、各大電商

    2024年02月01日
    瀏覽(20)
  • 『Android基礎(chǔ)入門(mén)』ViewPager+Fragment+BottomNavigationView實(shí)現(xiàn)底部導(dǎo)航

    『Android基礎(chǔ)入門(mén)』ViewPager+Fragment+BottomNavigationView實(shí)現(xiàn)底部導(dǎo)航

    ?????作者簡(jiǎn)介:一位喜歡寫(xiě)作,計(jì)科專(zhuān)業(yè)大三菜鳥(niǎo) ??個(gè)人主頁(yè):starry陸離 如果文章有幫到你的話(huà)記得點(diǎn)贊??+收藏??支持一下哦 在ViewPager與Fragment結(jié)合實(shí)現(xiàn)多頁(yè)面滑動(dòng)的學(xué)習(xí)上再進(jìn)一步,記錄一下ViewPager+Fragment+BottomNavigationView實(shí)現(xiàn)底部導(dǎo)航 1.復(fù)習(xí)ViewPager的用法 2.復(fù)習(xí)F

    2023年04月08日
    瀏覽(23)
  • ViewPager2+TabLayout

    ViewPager2+TabLayout

    ViewPager2最顯著的特點(diǎn)是基于RecyclerView實(shí)現(xiàn),RecyclerView是目前Android端最成熟的AdapterView解決方案,這帶來(lái)諸多好處: 1、拋棄傳統(tǒng)的PagerAdapter,統(tǒng)一了Adapter的API/ 2、通過(guò)LinearLayoutManager可以實(shí)現(xiàn)類(lèi)似抖音的縱向滑動(dòng) 3、支持DiffUitl,可以通過(guò)diff實(shí)現(xiàn)局部刷新 4、支持RTL(right-to-

    2023年04月19日
    瀏覽(22)
  • ViewPager2與TabLayout的簡(jiǎn)單使用

    ViewPager2與TabLayout的簡(jiǎn)單使用 MainActivity.java activity_main.xml ViewPagerAdapter.java ShowBigIdBean.java item_img.xml item_icon_layout.xml item_circle_shape.xml

    2024年02月12日
    瀏覽(16)
  • Android10 Settings系列(三)根據(jù)需求動(dòng)態(tài)添加刪除一級(jí)菜單、二級(jí)菜單的設(shè)置項(xiàng)

    當(dāng)時(shí)遇到定制需求,需要根據(jù)實(shí)際需要隱藏Settings的菜單項(xiàng),于是開(kāi)始了尋找方法 在看了一下源碼,經(jīng)過(guò)嘗試后,確認(rèn)生效后,就簡(jiǎn)單說(shuō)明一下Settings中布局中主要組成元素 Settings中的菜單項(xiàng)是由 PreferenceScreen 和Preference組成的。其中PreferenceScreen 類(lèi)似于我們平常使用布局中的

    2024年02月14日
    瀏覽(103)
  • ViewPager+ Fragment結(jié)合的setUserVisibleHint()調(diào)用時(shí)機(jī)

    ViewPager+ Fragment結(jié)合的setUserVisibleHint()調(diào)用時(shí)機(jī)

    最近的項(xiàng)目使用到了 ViewPager + Fragment 的模式,要求在每次 Fragment 獲取顯示的時(shí)候來(lái)刷新數(shù)據(jù),該項(xiàng)目下 ViewPager 有5個(gè)子fragment,在onCreateView及fragment的**setUserVisibleHint(bool isVisibleToUser)**中的isVisibleToUser為true的時(shí)候刷新數(shù)據(jù)的時(shí)候出現(xiàn)數(shù)據(jù)多次刷新的情況,因此對(duì)ViewPage + Fr

    2024年02月11日
    瀏覽(22)
  • Android studio心得——fragment動(dòng)態(tài)加載

    Android studio心得——fragment動(dòng)態(tài)加載

    在Android應(yīng)用程序中,F(xiàn)ragment是一種可以嵌入Activity中的組件。通過(guò) Fragment,我們可以將UI 目錄 前言 一、什么是Android Studio 二、簡(jiǎn)介Fragment 三、學(xué)期知識(shí)匯總 四、什么是碎片(Fragment) 五、頁(yè)面實(shí)現(xiàn)步驟 1.程序APP主界面的常用例子 2.定義4個(gè)Fragment 3.activity_main.xml代碼展示 4.四個(gè)

    2024年02月09日
    瀏覽(30)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包