Pārlūkot izejas kodu

添加多个适配器

shanmulinxi 2 gadi atpakaļ
vecāks
revīzija
f8448750b1

+ 3 - 0
app/build.gradle

@@ -66,6 +66,9 @@ dependencies {
     implementation 'com.github.bumptech.glide:glide:4.11.0'
     implementation 'org.greenrobot:eventbus:3.2.0'
     implementation 'com.tencent:mmkv-static:1.2.12'
+    implementation 'io.reactivex.rxjava3:rxjava:3.0.4'
+    implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
+    implementation 'com.ljx.rxlife3:rxlife-rxjava:3.0.0' //管理RxJava3生命周期,页面销毁,关闭请求
     // Okhttp库
 //    implementation 'com.google.code.gson:gson:2.8.5'
 }

+ 184 - 0
app/src/main/java/com/sunwin/visitorapp/adapter/BaseRecyclerAdapter.java

@@ -0,0 +1,184 @@
+package com.sunwin.visitorapp.adapter;
+
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * recyclerview适配器
+ */
+
+/**
+ * recyclerview适配器
+ */
+
+public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<BaseViewHolder> {
+
+//    protected Context context;//上下文
+    protected List<T> mList = new ArrayList<>();//数据源
+
+
+    public interface ItemClickListener<T> {
+        void click(int position, T item, BaseViewHolder holder);
+    }
+
+    protected ItemClickListener<T> itemClickListener;
+    public void setItemClick(ItemClickListener<T> itemClickListener) {
+        this.itemClickListener = itemClickListener;
+    }
+
+    protected ItemClickListener<T> itemLongClickListener;
+    public void setItemLongClick(ItemClickListener<T> itemLongClickListener) {
+        this.itemLongClickListener = itemLongClickListener;
+    }
+
+
+
+    public BaseRecyclerAdapter(){
+    }
+
+    @Override
+    public int getItemCount() {
+        return mList == null ? 0 : mList.size();
+    }
+
+    @Override
+    public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+
+//        View view = LayoutInflater.from(context).inflate(getLayoutId(viewType), parent, false);
+        return BaseViewHolder.getRecyclerHolder(getLayoutView(parent,viewType));
+    }
+
+    @Override
+    public void onBindViewHolder(final BaseViewHolder holder, int position) {
+        if (itemClickListener != null && holder != null) {
+            holder.itemView.setOnClickListener(view -> {
+                itemClickListener.click(position,  mList.get(position), holder);
+            });
+        }
+        if (itemLongClickListener != null && holder != null) {
+            holder.itemView.setOnLongClickListener(view -> {
+                itemLongClickListener.click(position,  mList.get(position), holder);
+                return true;
+            });
+        }
+        bind(position, mList.get(position), holder, getItemViewType(position));
+    }
+
+
+    protected abstract View getLayoutView(ViewGroup parent, int viewType);
+
+    public abstract void bind(int position, T data, BaseViewHolder holder, int viewType);
+
+    public void  setArray(T[] list) {
+        if (list != null) {
+            mList = Arrays.asList(list);
+        } else {
+            mList = new ArrayList<>();
+        }
+        notifyDataSetChanged();
+    }
+    //数据
+    public void  setList(List<T> list) {
+        if (list != null) {
+            mList = list;
+        } else {
+            mList = new ArrayList<>();
+        }
+        notifyDataSetChanged();
+    }
+    public void setItem(int pos,T item){
+        mList.set(pos,item);
+        notifyItemChanged(pos);
+    }
+
+    public void add(T item){
+        int position = mList.size();
+        mList.add(item);
+        notifyItemInserted(position);
+    }
+
+
+    //增加数据
+    public void addList(List<T> list) {
+        int position = mList.size();
+        if (list != null) {
+            mList.addAll(list);
+            notifyItemRangeInserted(position,list.size());
+        }
+
+
+    }
+
+    //清除数据
+    public void clear() {
+//        if (mList == null) {
+        mList = new ArrayList<>();
+//        }
+//        mList.removeAll(mList);
+
+        notifyDataSetChanged();
+    }
+
+    public T get(int index){
+        if (mList == null) {
+            return null;
+        }
+        return mList.get(index);
+    }
+    //得到数据
+    public List<T> getList() {
+        if (mList == null) {
+            mList = new ArrayList<>();
+        }
+        return mList;
+    }
+
+    //插入
+    public void insert(T item, int position) {
+        if (mList == null) {
+            mList = new ArrayList<T>();
+        }
+        mList.add(position, item);
+        notifyItemInserted(position);
+    }
+
+    //删除
+    public void remove(int position) {
+        if (mList == null) {
+            mList = new ArrayList<T>();
+        }
+        mList.remove(position);
+        notifyItemRemoved(position);
+        notifyItemRangeChanged(position, mList.size());
+    }
+
+
+
+    public boolean contains(AdapterInterface<T> adapterInterface,T item){
+        if(mList==null)return false;
+        boolean exist = false;
+        Iterator<T> iterator =  mList.iterator();
+        while (iterator.hasNext()){
+            T citem = iterator.next();
+            exist = adapterInterface.contrast(citem,item);
+        }
+        return exist;
+    }
+
+    public interface AdapterInterface<T>{
+        boolean contrast(T a, T b);
+    }
+
+
+
+
+
+}

+ 59 - 0
app/src/main/java/com/sunwin/visitorapp/adapter/BaseViewHolder.java

@@ -0,0 +1,59 @@
+package com.sunwin.visitorapp.adapter;
+
+
+import android.util.SparseArray;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.recyclerview.widget.RecyclerView;
+
+public class BaseViewHolder extends RecyclerView.ViewHolder {
+
+    private SparseArray<View> views;
+
+    private BaseViewHolder(View itemView) {
+        super(itemView);
+        this.views = new SparseArray<>();
+    }
+
+    /**
+     * 取得一个RecyclerHolder对象
+     *
+     * @param itemView 子项
+     * @return 返回一个RecyclerHolder对象
+     */
+    public static BaseViewHolder getRecyclerHolder(View itemView) {
+        return new BaseViewHolder(itemView);
+    }
+
+    /**
+     * 通过view的id获取对应的控件,如果没有则加入views中
+     *
+     * @param viewId 控件的id
+     * @return 返回一个控件
+     */
+    @SuppressWarnings("unchecked")
+    public <T extends View> T getView(int viewId) {
+        View view = views.get(viewId);
+        if (view == null) {
+            view = itemView.findViewById(viewId);
+            views.put(viewId, view);
+        }
+        return (T) view;
+    }
+
+    /**
+     * 设置字符串
+     */
+    public BaseViewHolder setText(int viewId, CharSequence text) {
+        TextView tv = getView(viewId);
+        tv.setText(text);
+        return this;
+    }
+
+
+
+
+
+
+}

+ 48 - 0
app/src/main/java/com/sunwin/visitorapp/adapter/EmptyRecyclerAdapter.java

@@ -0,0 +1,48 @@
+package com.sunwin.visitorapp.adapter;
+
+/**
+ * author : FLB
+ * date   : 2020/7/29
+ * desc   :
+ */
+public abstract class EmptyRecyclerAdapter<T> extends BaseRecyclerAdapter<T> {
+    public EmptyRecyclerAdapter() {
+        super();
+    }
+
+    private boolean isEmpty = false;
+    private boolean showEmpty = false;
+
+    public void setShowEmpty(boolean showEmpty) {
+        this.showEmpty = showEmpty;
+    }
+
+    @Override
+    public void onBindViewHolder(BaseViewHolder holder, int position) {
+        if(showEmpty&&isEmpty){
+            return;
+        }
+        super.onBindViewHolder(holder, position);
+    }
+
+    public final static int ViewType_Empty = -3;
+    @Override
+    public int getItemViewType(int position) {
+        if(showEmpty&&isEmpty)return ViewType_Empty;
+        return super.getItemViewType(position);
+    }
+
+    @Override
+    public int getItemCount() {
+        if(showEmpty){
+            if(mList==null||mList.size()==0){
+                isEmpty = true;
+                return 1;
+            }
+        }
+        isEmpty = false;
+        return super.getItemCount();
+    }
+
+
+}

+ 57 - 0
app/src/main/java/com/sunwin/visitorapp/adapter/ImagePagerAdapter.java

@@ -0,0 +1,57 @@
+package com.sunwin.visitorapp.adapter;
+
+import android.annotation.SuppressLint;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.PagerAdapter;
+
+import com.bumptech.glide.Glide;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * author : FLB
+ * date   : 2020/9/25
+ * desc   :
+ */
+public class ImagePagerAdapter extends PagerAdapter {
+
+    private List<Object> address = new ArrayList<>();
+
+    public void setData(List<Object> address) {
+        this.address = address;
+    }
+
+    @SuppressLint("CheckResult")
+    public void initView(ImageView view, int position){
+        Glide.with(view).load(address.get(position)).into(view);
+    }
+
+    @NonNull
+    @Override
+    public Object instantiateItem(@NonNull ViewGroup container, int position) {
+        ImageView view =  new ImageView(container.getContext());
+        initView(view,position);
+        container.addView(view);
+        return view;
+    }
+
+    @Override
+    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+        container.removeView((View) object);
+    }
+
+    @Override
+    public int getCount() {
+        return address.size();
+    }
+
+    @Override
+    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+        return view == object;
+    }
+}

+ 52 - 0
app/src/main/java/com/sunwin/visitorapp/adapter/ViewPagerAdapter.java

@@ -0,0 +1,52 @@
+package com.sunwin.visitorapp.adapter;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.PagerAdapter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * author : FLB
+ * date   : 2020/9/25
+ * desc   :
+ */
+public class ViewPagerAdapter extends PagerAdapter {
+
+    private List<View> views = new ArrayList<>();
+
+    public void setViews(List<View> views) {
+        this.views = views;
+    }
+
+    public void initView(View view, int position){
+
+    }
+
+    @NonNull
+    @Override
+    public Object instantiateItem(@NonNull ViewGroup container, int position) {
+        View view =  views.get(position);
+        initView(view,position);
+        container.addView(view);
+        return view;
+    }
+
+    @Override
+    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
+        container.removeView((View) object);
+    }
+
+    @Override
+    public int getCount() {
+        return views.size();
+    }
+
+    @Override
+    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
+        return view == object;
+    }
+}

+ 54 - 0
app/src/main/java/com/sunwin/visitorapp/view/DisplayWelcome.java

@@ -1,14 +1,68 @@
 package com.sunwin.visitorapp.view;
 
+import android.annotation.SuppressLint;
 import android.app.Presentation;
 import android.content.Context;
 import android.view.Display;
+import android.view.View;
 
+import androidx.annotation.NonNull;
+import androidx.viewpager.widget.PagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import com.rxjava.rxlife.RxLife;
 import com.sunwin.visitorapp.R;
+import com.sunwin.visitorapp.adapter.ImagePagerAdapter;
+import com.sunwin.visitorapp.adapter.ViewPagerAdapter;
+
+import org.greenrobot.eventbus.EventBus;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
+import io.reactivex.rxjava3.core.Observable;
+import io.reactivex.rxjava3.disposables.Disposable;
+import io.reactivex.rxjava3.functions.Consumer;
 
 public class DisplayWelcome extends Presentation {
+
+    private ViewPager ViewPagerWelcome;
+    private Disposable imageDisposable;
+    @SuppressLint("UseCompatLoadingForDrawables")
     public DisplayWelcome(Context outerContext, Display display) {
         super(outerContext, display);
         setContentView(R.layout.display_welcome);
+        ViewPagerWelcome = findViewById(R.id.ViewPagerWelcome);
+
+        ImagePagerAdapter viewPagerAdapter = new ImagePagerAdapter(){
+
+        };
+        List<Object> list = new ArrayList<>();
+        list.add(getResources().getDrawable(R.drawable.menu_green));
+        list.add(getResources().getDrawable(R.drawable.menu_red));
+        list.add(getResources().getDrawable(R.drawable.menu_orange));
+        viewPagerAdapter.setData(list);
+        ViewPagerWelcome.setAdapter(viewPagerAdapter);
+
+
+        imageDisposable = Observable.interval(6,4, TimeUnit.SECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(aLong -> {
+            int currentPage = ViewPagerWelcome.getCurrentItem();
+            if (currentPage==(list.size()-1)){
+                ViewPagerWelcome.setCurrentItem(0);
+            }
+            else{
+                ViewPagerWelcome.setCurrentItem(currentPage+1);
+            }
+        });
+    }
+
+
+
+    @Override
+    public void dismiss() {
+        super.dismiss();
+if(imageDisposable!=null&&!imageDisposable.isDisposed())imageDisposable.dispose();
     }
 }

+ 3 - 3
app/src/main/res/layout/display_welcome.xml

@@ -7,9 +7,9 @@
 
     >
 
-    <ImageView
-        android:id="@+id/ImageWelcome"
-        android:src="@color/ColorGray_O_6"
+
+    <androidx.viewpager.widget.ViewPager
+        android:id="@+id/ViewPagerWelcome"
         android:layout_width="0dp"
         android:layout_height="match_parent"
         android:layout_weight="3"/>