bottomtabbar实现底部导航+fragment切换+RecyclerView+多条目+长按删除条目

效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MainActivity


package com.bawei;

import android.graphics.Color;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.os.Bundle;
import android.widget.RadioGroup;

import com.bawei.fragments.Fragment1;
import com.bawei.fragments.Fragment2;
import com.bawei.fragments.Fragment3;
import com.hjm.bottomtabbar.BottomTabBar;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends FragmentActivity {

   private BottomTabBar mb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化组件
        mb=(BottomTabBar)findViewById(R.id.bottom_tab_bar);
        mb.init(getSupportFragmentManager())
                .setImgSize(50,50)
                .setFontSize(8)
                .setTabPadding(4,6,10)
                .setChangeColor(Color.RED,Color.DKGRAY)
                .addTabItem("首页",R.drawable.ic_hhh, Fragment1.class)
                .addTabItem("分类",R.drawable.ic_launcher_background, Fragment2.class)
                .addTabItem("购物车",R.drawable.ic_hhh, Fragment3.class)
                .isShowDivider(false)
                .setOnTabChangeListener(new BottomTabBar.OnTabChangeListener() {
                    @Override
                    public void onTabChange(int position, String name) {

                    }
                });
    }
}

Fragments
package com.bawei.fragments;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.bawei.R;
import com.bawei.adpter.MyAdapter;
import com.bawei.bean.Data;
import com.bawei.bean.JsonBean;
import com.bawei.presenter.MainPresenter;
import com.bawei.view.MainView;
import com.google.gson.Gson;

import java.util.ArrayList;

public class Fragment1 extends Fragment implements MainView {
    private RecyclerView rlv;
    private RecyclerView rlv1;
    private MainPresenter presenter;
    private MyAdapter myAdapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1, container, false);
        //找控件
        rlv = view.findViewById(R.id.rlv);
       rlv1 = view.findViewById(R.id.rlv1);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        //布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        rlv.setLayoutManager(linearLayoutManager);
     /*   GridLayoutManager gridLayoutManager=new GridLayoutManager(getActivity(0));

        rlv1.setLayoutManager(gridLayoutManager);
*/

        //实例化p
        presenter = new MainPresenter(this);
        presenter.attechView(this);
        presenter.onRelated();
    }



    @Override
    public void getViewData(String json) {
        Gson gson = new Gson();
        JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
         final ArrayList<Data> data = jsonBean.getData().getData();
        //Log.e("tag", "getViewData: "+data);
        if (data!=null){
            myAdapter = new MyAdapter(getActivity(), data);
            rlv.setAdapter(myAdapter);
            //rlv1.setAdapter(myAdapter);

        }

        /**
         * 点击事件
         */
        myAdapter.setItemClickListener(new MyAdapter.onItemClickListener() {
            @Override
            public void ClickListener(View view, int position) {
                Toast.makeText(getActivity(),"单击",Toast.LENGTH_SHORT).show();
            }
        });
        myAdapter.setItemLongClickListener(new MyAdapter.onItemLongClickListener() {
            @Override
            public void LongClickListener(View view, int position) {
                data.remove(position);
                myAdapter.notifyItemRangeRemoved(position,1);
                Toast.makeText(getActivity(),"删除成功",Toast.LENGTH_SHORT).show();
            }
        });
    }

    //页面销毁时调用软引用销毁
    @Override
    public void onDestroy() {
        super.onDestroy();
        presenter.deatchView();
    }
    }


package com.bawei.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.R;

public class Fragment2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment2, container, false);
        return view;
    }
}

package com.bawei.fragments;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.R;

public class Fragment3 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment3, container, false);
        return view;
    }
}

adpter
package com.bawei.adpter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.R;
import com.bawei.bean.Data;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private ArrayList<Data> data;
    private static final int TYPE_ONE = 0;
    private static final int TYPE_TW0 = 1;

    public MyAdapter(Context context, ArrayList<Data> data) {
        this.context = context;
        this.data = data;
    }

    @Override
    public int getItemViewType(int position) {
        if (position  % 4 == 0) {
            return TYPE_TW0;
        } else {
            return TYPE_ONE;
        }
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
       if (i == TYPE_ONE) {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_one, null, false);
            MyViewHolder myViewHolder = new MyViewHolder(view);

            return myViewHolder;
        } else {
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_two, null, false);
            MyViewHolder myViewHolder = new MyViewHolder(view);

            return myViewHolder;
        }
    }

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder myViewHolder, int i) {
        int itemViewType = getItemViewType(i);
        //配置imageloader
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .cacheOnDisk(true)
                .build();
        Data data = this.data.get(i);
        if (itemViewType == TYPE_ONE) {
            if (data != null) {
                myViewHolder.title1.setText(this.data.get(i).getTitle());
                ImageLoader.getInstance().displayImage("http://365jia.cn/uploads/" + this.data.get(i).getPics().get(0), myViewHolder.img1, options);
            }

        } else {
            if (data != null) {
            myViewHolder.title2.setText(this.data.get(i).getTitle());
            ImageLoader.getInstance().displayImage("http://365jia.cn/uploads/" + this.data.get(i).getPics().get(0), myViewHolder.img2, options);
        }
    }
        //单击
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int position = myViewHolder.getLayoutPosition();
                View view = myViewHolder.itemView;
                if (itemClickListener != null) {
                    itemClickListener.ClickListener(view, position);
                }
            }
        });
        //长按
        myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                int position = myViewHolder.getLayoutPosition();
                View view = myViewHolder.itemView;
                if (itemLongClickListener != null) {
                    itemLongClickListener.LongClickListener(view, position);
                }
                return true;
            }
        });
    }

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

    //自定义
    public class MyViewHolder extends RecyclerView.ViewHolder {

        private final ImageView img1;
        private final ImageView img2;
        private final TextView title1;
        private final TextView title2;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            img1 = itemView.findViewById(R.id.img1);
            img2 = itemView.findViewById(R.id.img2);
            title1 = itemView.findViewById(R.id.title1);
            title2 = itemView.findViewById(R.id.title2);
        }
    }

    /**
     * 接口回调
     */
    public interface onItemClickListener {
        void ClickListener(View view, int position);
    }

    public interface onItemLongClickListener {
        void LongClickListener(View view, int position);
    }

    public onItemClickListener itemClickListener;
    public onItemLongClickListener itemLongClickListener;

    public void setItemClickListener(onItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }

    public void setItemLongClickListener(onItemLongClickListener itemLongClickListener) {
        this.itemLongClickListener = itemLongClickListener;
    }
}

app
package com.bawei.app;

import android.app.Application;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.utils.StorageUtils;

import java.io.File;


public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        File file = StorageUtils.getCacheDirectory(this);
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                .diskCache(new UnlimitedDiskCache(file))
                .diskCacheSize(50 * 1024 * 1024)
                .diskCacheFileCount(50)
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .build();
        ImageLoader.getInstance().init(configuration);
    }
}

bean
package com.bawei.bean;

import java.util.ArrayList;

/**
 * @Auther: Mac
 * @Date: 2019/2/18 09:19:16
 * @Description:
 */
public class Data {
    private String title;
    private ArrayList<String> pics;

    public Data(String title, ArrayList<String> pics) {
        this.title = title;
        this.pics = pics;
    }

    public Data() {
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public ArrayList<String> getPics() {
        return pics;
    }

    public void setPics(ArrayList<String> pics) {
        this.pics = pics;
    }

    @Override
    public String toString() {
        return "Data{" +
                "title='" + title + '\'' +
                ", pics=" + pics +
                '}';
    }
}

package com.bawei.bean;

import java.util.ArrayList;

/**
 * @Auther: Mac
 * @Date: 2019/2/18 09:47:37
 * @Description:
 */
public class Extras {
    ArrayList<Slider> slider;

    public Extras(ArrayList<Slider> slider) {
        this.slider = slider;
    }

    @Override
    public String toString() {
        return "Extras{" +
                "slider=" + slider +
                '}';
    }

    public ArrayList<Slider> getSlider() {
        return slider;
    }

    public void setSlider(ArrayList<Slider> slider) {
        this.slider = slider;
    }

    public class Slider{
       private String id;
       private String inner_news;
       private String link;
       private String pic;
       private String t;
       private String title;
       private String type;
       private String type_sign;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getInner_news() {
            return inner_news;
        }

        public void setInner_news(String inner_news) {
            this.inner_news = inner_news;
        }

        public String getLink() {
            return link;
        }

        public void setLink(String link) {
            this.link = link;
        }

        public String getPic() {
            return pic;
        }

        public void setPic(String pic) {
            this.pic = pic;
        }

        public String getT() {
            return t;
        }

        public void setT(String t) {
            this.t = t;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public String getType_sign() {
            return type_sign;
        }

        public void setType_sign(String type_sign) {
            this.type_sign = type_sign;
        }

        public Slider(String id, String inner_news, String link, String pic, String t, String title, String type, String type_sign) {
            this.id = id;
            this.inner_news = inner_news;
            this.link = link;
            this.pic = pic;
            this.t = t;
            this.title = title;
            this.type = type;
            this.type_sign = type_sign;
        }
    }
}

package com.bawei.bean;

import java.util.ArrayList;

/**
 * @Auther: Mac
 * @Date: 2019/2/18 09:23:04
 * @Description:
 */
public class JsonBean {
    private String code;
    private Data1 data;
    private int httpStatusCode;

    @Override
    public String toString() {
        return "JsonBean{" +
                "code='" + code + '\'' +
                ", data=" + data +
                ", httpStatusCode=" + httpStatusCode +
                '}';
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Data1 getData() {
        return data;
    }

    public void setData(Data1 data) {
        this.data = data;
    }

    public int getHttpStatusCode() {
        return httpStatusCode;
    }

    public void setHttpStatusCode(int httpStatusCode) {
        this.httpStatusCode = httpStatusCode;
    }

    public JsonBean(String code, Data1 data, int httpStatusCode) {
        this.code = code;
        this.data = data;
        this.httpStatusCode = httpStatusCode;
    }

    public class Data1 {
        private String bindtips;
        private ArrayList<Data> data;
        private Extras extras;
        private int max_page;
        private int page;
        private int perpage;
        private int total;

        @Override
        public String toString() {
            return "Data1{" +
                    "bindtips='" + bindtips + '\'' +
                    ", data=" + data +
                    ", extras=" + extras +
                    ", max_page=" + max_page +
                    ", page=" + page +
                    ", perpage=" + perpage +
                    ", total=" + total +
                    '}';
        }

        public String getBindtips() {
            return bindtips;
        }

        public void setBindtips(String bindtips) {
            this.bindtips = bindtips;
        }

        public ArrayList<Data> getData() {
            return data;
        }

        public void setData(ArrayList<Data> data) {
            this.data = data;
        }

        public Extras getExtras() {
            return extras;
        }

        public void setExtras(Extras extras) {
            this.extras = extras;
        }

        public int getMax_page() {
            return max_page;
        }

        public void setMax_page(int max_page) {
            this.max_page = max_page;
        }

        public int getPage() {
            return page;
        }

        public void setPage(int page) {
            this.page = page;
        }

        public int getPerpage() {
            return perpage;
        }

        public void setPerpage(int perpage) {
            this.perpage = perpage;
        }

        public int getTotal() {
            return total;
        }

        public void setTotal(int total) {
            this.total = total;
        }

        public Data1(String bindtips, ArrayList<Data> data, Extras extras, int max_page, int page, int perpage, int total) {
            this.bindtips = bindtips;
            this.data = data;
            this.extras = extras;
            this.max_page = max_page;
            this.page = page;
            this.perpage = perpage;
            this.total = total;
        }
    }

}

model
package com.bawei.model;

import android.os.Handler;
import android.os.Message;
import com.bawei.util.OkHttpUtils;
import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Response;


public class MainModel {
    String url = "http://365jia.cn/news/api3/365jia/news/headline?page=1";
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                String json = (String) msg.obj;

                mainListener.onResult(json);
            }
        }
    };

    public void getHttpData() {
        OkHttpUtils.getInstance().doGet(url, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String json = response.body().string();
                //发送消息
                Message message = new Message();
                message.what = 0;
                message.obj = json;
                handler.sendMessage(message);
            }
        });
    }

    /**
     * 接口回调
     */
    public interface onMainListener {
        void onResult(String json);
    }

    public onMainListener mainListener;

    public void setOnMainListener(onMainListener onMainListener) {
        this.mainListener = onMainListener;
    }
}

presenter
package com.bawei.presenter;


import com.bawei.model.MainModel;
import com.bawei.view.MainView;

import java.lang.ref.WeakReference;


public class MainPresenter<T> {

    private final MainModel mainModel;
    private final MainView mainView;
    private WeakReference<T> tWeakReference = null;

    public MainPresenter(MainView view) {
        mainModel = new MainModel();
        mainView = view;
    }


    public void onRelated() {
        mainModel.getHttpData();
        //调用m接口关联view
        mainModel.setOnMainListener(new MainModel.onMainListener() {
            @Override
            public void onResult(String json) {
                mainView.getViewData(json);
            }
        });
    }

    //通过软引用控制外部类对象
    public void attechView(T t) {
        tWeakReference = new WeakReference<T>(t);
    }

    //清空软引用
    public void deatchView() {
        if (tWeakReference != null) {
            tWeakReference.clear();
            tWeakReference = null;
        }
    }
}

util
package com.bawei.util;

import android.util.Log;

import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;


public class OkHttpUtils {
    /**
     * 单例模式
     */
    private static OkHttpUtils okHttpUtils = null;

    private OkHttpUtils() {
    }

    public static OkHttpUtils getInstance() {
        //双层判断
        if (okHttpUtils == null) {
            synchronized (OkHttpUtils.class) {
                okHttpUtils = new OkHttpUtils();
            }

        }
        return okHttpUtils;
    }

    /**
     * 拦截器
     */
    private Interceptor getInterceptor() {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Log.e("tag", "log:拦截器 " + message);
            }
        });
        return interceptor;
    }

    /**
     * doGet方法
     */
    public void doGet(String url, Callback callback) {

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(getInterceptor())
                .build();

        Request request = new Request.Builder()
                .url(url)
                .build();
        okHttpClient.newCall(request).enqueue(callback);
    }
}

view
package com.bawei.util;

import android.util.Log;

import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;


public class OkHttpUtils {
    /**
     * 单例模式
     */
    private static OkHttpUtils okHttpUtils = null;

    private OkHttpUtils() {
    }

    public static OkHttpUtils getInstance() {
        //双层判断
        if (okHttpUtils == null) {
            synchronized (OkHttpUtils.class) {
                okHttpUtils = new OkHttpUtils();
            }

        }
        return okHttpUtils;
    }

    /**
     * 拦截器
     */
    private Interceptor getInterceptor() {
        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
            @Override
            public void log(String message) {
                Log.e("tag", "log:拦截器 " + message);
            }
        });
        return interceptor;
    }

    /**
     * doGet方法
     */
    public void doGet(String url, Callback callback) {

        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(getInterceptor())
                .build();

        Request request = new Request.Builder()
                .url(url)
                .build();
        okHttpClient.newCall(request).enqueue(callback);
    }
}

MainActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <com.hjm.bottomtabbar.BottomTabBar
        android:id="@+id/bottom_tab_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
    </com.hjm.bottomtabbar.BottomTabBar>


</android.support.constraint.ConstraintLayout>
<?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="#00f">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rlv1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:maxHeight="10dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3">

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rlv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:maxHeight="10dp" />
    </LinearLayout>

</LinearLayout>

<?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="#0ff">

</LinearLayout>

<?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="#0f0">

</LinearLayout>

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

    <ImageView
        android:id="@+id/img1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:layout_margin="10dp"
        android:src="@mipmap/ic_launcher_round" />

    <TextView
        android:id="@+id/title1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@id/img1"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="10dp"
        android:layout_toLeftOf="@id/img1"
        android:text="哈哈"
        android:textSize="15sp" />
</RelativeLayout>

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"

    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="哈哈"
        android:layout_margin="10dp"
        android:textSize="15sp" />

    <ImageView
        android:id="@+id/img2"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:layout_below="@id/title2"
        android:layout_margin="10dp"
        android:src="@mipmap/ic_launcher_round" />


</RelativeLayout>

依赖
 implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
    implementation 'com.squareup.okhttp3:okhttp:3.2.0'
    implementation 'com.squareup.okio:okio:1.7.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.android.support:recyclerview-v7:28.+'
    implementation 'com.google.code.gson:gson:2.8.5'
    compile 'com.hjm:BottomTabBar:1.1.1'


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个实现需要以下步骤: 1. 在布局文件中添加ViewPager2和TabLayout: ```xml <com.google.android.material.tabs.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabGravity="fill" app:tabMode="fixed" /> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 2. 在代码中初始化ViewPager2和TabLayout: ```java ViewPager2 viewPager = findViewById(R.id.view_pager); TabLayout tabLayout = findViewById(R.id.tab_layout); viewPager.setAdapter(new MyPagerAdapter(this)); new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> tab.setText("Tab " + (position + 1)) ).attach(); ``` 3. 创建PagerAdapter,用于管理Fragment: ```java public class MyPagerAdapter extends FragmentStateAdapter { public MyPagerAdapter(FragmentActivity fa) { super(fa); } @Override public Fragment createFragment(int position) { return new MyFragment(position + 1); } @Override public int getItemCount() { return 3; } } ``` 4. 创建Fragment,用于显示RecyclerView: ```java public class MyFragment extends Fragment { private int mTabNumber; public MyFragment(int tabNumber) { mTabNumber = tabNumber; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_my, container, false); RecyclerView recyclerView = rootView.findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(new MyRecyclerViewAdapter(mTabNumber)); return rootView; } } ``` 5. 创建RecyclerViewAdapter,用于显示数据: ```java public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> { private int mTabNumber; public MyRecyclerViewAdapter(int tabNumber) { mTabNumber = tabNumber; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_my, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.mTextView.setText("Tab " + mTabNumber + ", Item " + (position + 1)); } @Override public int getItemCount() { return 10; } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView mTextView; public ViewHolder(@NonNull View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text_view); } } } ``` 6. 创建RecyclerView的item布局文件和Fragment的布局文件: item_my.xml: ```xml <TextView android:id="@+id/text_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" /> ``` fragment_my.xml: ```xml <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 这样就完成了实现。每个Tab都显示一个RecyclerView切换Tab时切换RecyclerView
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值