重点:
//1.这是R.layout.recycleview //2.fragment中运用recyclerView RecyclerView recyclerView; recyclerView = (RecyclerView) inflater.inflate(R.layout.recycleview, viewPager, false);//recyclerView的xml放在这里 recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 6));//一行6个 mAdapter = new ManagerAdapter((List) mData, versionMap, mContext, index, HOME_ENTRANCE_PAGE_SIZE); //3.adapter中 //用来连接adapter_app_list以及放入ViewHolder @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.d(TAG, "onCreateViewHolder() called with: parent = [" + parent + "], viewType = [" + viewType + "]"); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_app_list,parent,false); ViewHolder holder = new ViewHolder(view); return holder; } //用来修改UI的 @Override public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") int position) { Log.d(TAG, "onBindViewHolder() called with: holder = [" + holder + "], position = [" + position + "]"); this.holder = holder; this.position = position; res = mContext.getResources(); recyclerViewData(); if (progressBar!=null) { //progressBar Listener progressBar.setOnAnimProgressListener(new CircularProgressView.OnAnimProgressListener() { @Override public void valueUpdate(int progress) { }s }); } } //重点在此方法中,参数可以自定义 public ManagerAdapter(List data, Map versionMap, Context context, int index, int pageSize){ Log.d(TAG, "ManagerAdapter() called with: data = [" + data.toString() + "], context = [" + context + "]"); this.mData = data; this.mContext = context; this.mIndex = index; this.mPageSize = pageSize; this.versionMap = versionMap; } //第二个重点,用来定义UI参数的,呼应public class ManagerAdapter extends RecyclerView.Adapter implements Handler.Callback{中的ManagerAdapter.ViewHolder class ViewHolder extends RecyclerView.ViewHolder{ ImageView imgIcon; TextView tvName; TextView tvVersion; TextView tvState; CircularProgressView progressBar; ImageView imgDel ; ImageView imgBgDelBlue; ImageView imgBgDelGrey; TextView btnState; public ViewHolder(View itemView) { super(itemView); Log.d(TAG, "ViewHolder() called with: itemView = [" + itemView + "]"); imgIcon = itemView.findViewById(R.id.img_icon); tvName = itemView.findViewById(R.id.tv_name); tvVersion = itemView.findViewById(R.id.tv_version); tvState = itemView.findViewById(R.id.btn_state); progressBar = itemView.findViewById(R.id.bar_manager); imgDel = itemView.findViewById(R.id.img_icon_del); imgBgDelBlue = itemView.findViewById(R.id.bg_icon); imgBgDelGrey = itemView.findViewById(R.id.bg_icon1); btnState = itemView.findViewById(R.id.btn_state); } }
java
fragment(activity)
注意:LinearLayout.LayoutParams layoutParams12 = ...
//首页菜单分页
LinearLayout.LayoutParams entrancelayoutParams = ...
homeEntranceLayout.setLayoutParams(entrancelayoutParams);
viewPager.setLayoutParams(layoutParams12);
1.entrancelayoutParams的类型要是viewpaper父层的类型。
2.layoutParams12要是viewpaper的类型
其中包含item点击事件
private ManagerAdapter mAdapter = null;
private RecyclerView recyclerView;
private LinearLayout homeEntranceLayout;
private ViewPager viewPager;
private void viewPagerPaging() {
LinearLayout.LayoutParams layoutParams12 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) ((float) ScreenUtil.getScreenWidth() / 2.0f));
//首页菜单分页
LinearLayout.LayoutParams entrancelayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int) ((float) ScreenUtil.getScreenWidth() / 2.0f + 70));
homeEntranceLayout.setLayoutParams(entrancelayoutParams);
viewPager.setLayoutParams(layoutParams12);
LayoutInflater inflater = LayoutInflater.from(getContext());
//将RecyclerView放至ViewPager中:
int pageSize = HOME_ENTRANCE_PAGE_SIZE;
//一共的页数等于 总数/每页数量,并取整。
int pageCount = (int) Math.ceil(mData.size() * 1.0 / pageSize);
List viewList = new ArrayList();
for (int index = 0; index < pageCount; index++) {
//每个页面都是inflate出一个新实例
recyclerView = (RecyclerView) inflater.inflate(R.layout.recycleview, viewPager, false);
recyclerView.setLayoutParams(layoutParams12);
recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 6));
mAdapter = new ManagerAdapter((List) mData, versionMap, mContext, index, HOME_ENTRANCE_PAGE_SIZE);
mAdapter.setOnclick(new ManagerAdapter.ClickInterface() {
@Override
public void onButtonClick(View view, int position) {
Log.d(TAG, "onButtonClick() called with: Click Button - position:" + position + "name:" + mData.get(position).getName());
statusBtnClick(view, position);
}
@Override
public void onIconClick(View view, int position) {
Log.d(TAG, "onIconClick() called with: Click Icon - position:" + position + "name:" + mData.get(position).getName());
View itemView = recyclerView.getLayoutManager().findViewByPosition(position);
TextView state = itemView.findViewById(R.id.btn_state);
ImageView imgDel = itemView.findViewById(R.id.img_icon_del);
ImageView imgBgDelBlue = itemView.findViewById(R.id.bg_icon);;
ImageView imgBgDelGrey = itemView.findViewById(R.id.bg_icon1);
if (state.getText().toString().equals(Constant.STATE_INSTALL)) {
imgDel.setVisibility(View.VISIBLE);
imgBgDelBlue.setVisibility(View.VISIBLE);
imgBgDelBlue.setAlpha(0.7f);
imgBgDelGrey.setVisibility(View.VISIBLE);
imgBgDelGrey.setAlpha(0.7f);
getPresenter().showDialogMsg(getString(R.string.DIALOG_BTN_DEL));
} else {
changeToOtherFragment(false, view, position);
}
}
});
mAdapter.setOnLongClick(new ManagerAdapter.LongClickInterface() {
@Override
public void onIconLongClick(View view, int position) {
Log.d(TAG, "onIconLongClick() called with: view = [" + view + "], position = [" + position + "]");
mPosition = position;
getPresenter().showDialogMsg(Constant.DIALOG_BTN_DEL);
}
});
recyclerView.setAdapter(mAdapter);
recyclerView.setNestedScrollingEnabled(false);
viewList.add(recyclerView);
}
ViewPagerAdapter adapter = new ViewPagerAdapter(viewList);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener((new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageSelected() called with: position = [" + position + "]");
}
}));
}
recyclerView的adapter
package com.fawcar.dlife6.appmarket.adapter; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; import android.net.Uri; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import androidx.recyclerview.widget.RecyclerView; import com.fawcar.dlife6.appmarket.R; import com.fawcar.dlife6.appmarket.bean.Manager; import com.fawcar.dlife6.appmarket.presenter.ManagerBasePresenter; import com.fawcar.dlife6.appmarket.presenter.ManagerPresenter; import com.fawcar.dlife6.appmarket.util.CircularProgressView; import com.fawcar.dlife6.appmarket.util.Constant; import com.fawcar.dlife6.appmarket.view.BaseView; //import com.fawcar.dlife6.sotacore.manager.CheckManager; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.List; import java.util.Map; import java.util.logging.LogManager; public class ManagerAdapter extends RecyclerView.Adapterimplements Handler.Callback{ private static final String TAG = ManagerAdapter.class.getSimpleName(); private List mData; private Context mContext; private Resources res; private ViewHolder holder; private int position; //页数下标,从0开始(通俗讲第几页) private int mIndex; //每页显示最大条目个数 private int mPageSize; private ClickInterface clickInterface; private LongClickInterface longClickInterface; private Manager manager; private Handler handler; private int progress; private CircularProgressView progressBar; private TextView textView; private Runnable runnable; private Map versionMap; public ManagerAdapter(List data, Map versionMap, Context context, int index, int pageSize){ Log.d(TAG, "ManagerAdapter() called with: data = [" + data.toString() + "], context = [" + context + "]"); this.mData = data; this.mContext = context; this.mIndex = index; this.mPageSize = pageSize; this.versionMap = versionMap; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { Log.d(TAG, "onCreateViewHolder() called with: parent = [" + parent + "], viewType = [" + viewType + "]"); View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_app_list,parent,false); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") int position) { Log.d(TAG, "onBindViewHolder() called with: holder = [" + holder + "], position = [" + position + "]"); this.holder = holder; this.position = position; res = mContext.getResources(); recyclerViewData(); if (progressBar!=null) { //progressBar Listener progressBar.setOnAnimProgressListener(new CircularProgressView.OnAnimProgressListener() { @Override public void valueUpdate(int progress) { } }); } } private void recyclerViewData() { final int pos = position + mIndex * mPageSize; manager = mData.get(pos); String version = versionMap.get(manager.getSid()); holder.tvName.setText(manager.getName()); holder.tvVersion.setText("v"+version); if (manager.getCompare() > 0){ holder.tvState.setText(Constant.STATE_UPDATE); }else if (manager.getCompare() == 0){ holder.tvState.setText(Constant.STATE_OPEN); }else if (manager.getCompare() == -1){ holder.tvState.setText(Constant.STATE_INSTALL); }else { holder.tvState.setText(Constant.STATE_INSTALLING); } //图片叠加 setImgIcon(); holder.imgIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (clickInterface != null){ clickInterface.onIconClick(v,pos); } } }); holder.imgIcon.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { if (longClickInterface != null){ Log.d(TAG, "onLongClick() called with: view = [" + view + "]"); longClickInterface.onIconLongClick(view,pos); } return false; } }); holder.tvState.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (clickInterface != null){ clickInterface.onButtonClick(v,pos); } } }); } private void setImgIcon() { BitmapDrawable bitmapDrawable = (BitmapDrawable) res.getDrawable(Integer.parseInt(manager.getIcon()),mContext.getTheme()); Bitmap managerBitmap = bitmapDrawable.getBitmap(); int width = holder.imgIcon.getBackground().getIntrinsicWidth(); //设置图片透明度 Paint paint = new Paint(); paint.setAlpha(178); //设置透明程度 Bitmap bgBitmapBlue = BitmapFactory.decodeResource(res, R.mipmap.bg_app_insatll_1); Bitmap bgBitmapGrey = BitmapFactory.decodeResource(res, R.mipmap.bg_app_install_3); Bitmap barBitmap; Bitmap newBitmap = Bitmap.createBitmap(width, width, Bitmap.Config.ARGB_8888); Canvas cv = new Canvas(newBitmap); cv.drawBitmap(managerBitmap, 0, 0, null); cv.drawBitmap(bgBitmapBlue, 0, 0, paint); cv.drawBitmap(bgBitmapGrey, 0, 0, paint); String state = holder.tvState.getText().toString(); switch (state){ case Constant.STATE_INSTALLING: Log.d(TAG, "recyclerViewData() STATE_INSTALLING"); holder.tvState.setAlpha(0.4f); // barBitmap = BitmapFactory.decodeResource(res, R.mipmap.bg_app_install_2); // cv.drawBitmap(barBitmap, width/4, width/4, null); holder.imgIcon.setImageBitmap(newBitmap); break; case Constant.STATE_DOWNLOADING: Log.d(TAG, "recyclerViewData() STATE_DOWNLOADING"); case Constant.STATE_CONTINUE: Log.d(TAG, "recyclerViewData() STATE_CONTINUE"); // barBitmap = BitmapFactory.decodeResource(res, R.mipmap.bg_app_downloading_1); // cv.drawBitmap(barBitmap, width/4, width/4, null); holder.imgIcon.setImageBitmap(newBitmap); holder.progressBar.setVisibility(View.VISIBLE); progressBar = holder.progressBar; textView = holder.tvState; excuteProgress(); break; case Constant.STATE_INSTALL: Log.d(TAG, "recyclerViewData() STATE_INSTALL"); holder.imgDel.setVisibility(View.VISIBLE); holder.imgBgDelBlue.setVisibility(View.VISIBLE); holder.imgBgDelGrey.setVisibility(View.VISIBLE); break; default: Log.d(TAG, "recyclerViewData() default"); holder.imgIcon.setImageBitmap(managerBitmap); break; } } private void excuteProgress() { handler = new Handler(this); runnable = new Runnable() { @Override public void run() { handler.postDelayed(this, 50); handler.sendEmptyMessage(1); } }; handler.postDelayed(runnable, 0); } @Override public boolean handleMessage(Message message) { switch (message.what){ case 1: progress = message.arg1; if (progress == Constant.MAX_PROGRESS){ if (textView.getText().toString().equals(Constant.STATE_DOWNLOADING)){ textView.setText(Constant.STATE_INSTALLING); }else if (textView.getText().toString().equals(Constant.STATE_INSTALLING)){ textView.setText(Constant.STATE_OPEN); } handler.removeCallbacks(runnable); }else { progress ++; } progressBar.startAnimProgress(progress); } return false; } @Override public int getItemCount() { Log.d(TAG, "getItemCount() called"); return mData.size() > (mIndex + 1) * mPageSize ? mPageSize : (mData.size() - mIndex * mPageSize); } @Override public long getItemId(int position) { Log.d(TAG, "getItemId() called with: position = [" + position + "]"); return position + mIndex * mPageSize; } class ViewHolder extends RecyclerView.ViewHolder{ ImageView imgIcon; TextView tvName; TextView tvVersion; TextView tvState; CircularProgressView progressBar; ImageView imgDel ; ImageView imgBgDelBlue; ImageView imgBgDelGrey; TextView btnState; public ViewHolder(View itemView) { super(itemView); Log.d(TAG, "ViewHolder() called with: itemView = [" + itemView + "]"); imgIcon = itemView.findViewById(R.id.img_icon); tvName = itemView.findViewById(R.id.tv_name); tvVersion = itemView.findViewById(R.id.tv_version); tvState = itemView.findViewById(R.id.btn_state); progressBar = itemView.findViewById(R.id.bar_manager); imgDel = itemView.findViewById(R.id.img_icon_del); imgBgDelBlue = itemView.findViewById(R.id.bg_icon); imgBgDelGrey = itemView.findViewById(R.id.bg_icon1); btnState = itemView.findViewById(R.id.btn_state); } } public void setOnclick(ClickInterface clickInterface){ Log.d(TAG, "setOnclick() called with: clickInterface = [" + clickInterface + "]"); this.clickInterface = clickInterface; } public void setOnLongClick(LongClickInterface longClick){ Log.d(TAG, "setOnLongClick() called with: clickInterface = [" + clickInterface + "]"); this.longClickInterface = longClick; } public interface ClickInterface{ void onButtonClick(View view,int position); void onIconClick(View view ,int position); } public interface LongClickInterface{ void onIconLongClick(View view ,int position); } }
viewpaper的adapter
package com.fawcar.dlife6.appmarket.adapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.PagerAdapter;
import java.util.List;
public class ViewPagerAdapter extends PagerAdapter {
private static final String TAG = ViewPagerAdapter.class.getSimpleName();
private List list;
public ViewPagerAdapter(List list){
Log.d(TAG, "ViewPagerAdapter() called with: list = [" + list + "]");
this.list = list;
}
@Override
public void destroyItem(ViewGroup container, int position,@NonNull Object object) {
container.removeView(list.get(position));
Log.d(TAG, "destroyItem() called with: container = [" + container + "], position = [" + position + "], object = [" + object + "]");
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(list.get(position));
Log.d(TAG, "instantiateItem() called with: container = [" + container + "], position = [" + position + "]");
return list.get(position);
}
@Override
public int getCount() {
Log.d(TAG, "getCount() called");
if (list == null)
return 0;
return list.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
Log.d(TAG, "isViewFromObject() called with: view = [" + view + "], object = [" + object + "]");
return view == object;
}
}
xml
recyclerView
adapter
fragment(activity)



