android onscrolllistener导致内存过多,android - 水平RecyclerView OnScrollListener禁用onItemClick - 堆栈内存溢出...

我在水平griview上实现了RecyclerView OnScrollListener,除了未注册onClick on项目外,它可以按预期工作,实际上,我发现在单击之前必须重复单击项目大约5次,这是因为这些项目是自动滚动的,但是当我没有实现OnScrollListener时却没有发生。 如何按一下项目自动滚动一次并调用onclick?

我的代码如下:

初始化我的RecycleView视图:

RecyclerView recyclerView;

private CustomAdapter_HGV adapter_hgv;

recyclerView = findViewById(R.id.recyclerview);

horizontalLayoutManager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false);

recyclerView.setLayoutManager(horizontalLayoutManager);

adapter_hgv = new CustomAdapter_HGV(this, arrayListString_MainImages_HGV);

adapter_hgv.setClickListener(this);

recyclerView.setAdapter(adapter_hgv);

点击监听器(onCreate)

public void onItemClick(View view, int position) {

Toast.makeText(getApplicationContext(),"Click", Toast.LENGTH_SHORT).show();

}

设置我的适配器:

adapter_hgv = new CustomAdapter_HGV(this, arrayListString_MainImages_HGV);

adapter_hgv.setClickListener(this);

recyclerView.setAdapter(adapter_hgv);

设置我的自动滚动

/*** START HSV AUTO SCROLL***/

final int duration = 10;

final int pixelsToMove = 1;

final Handler mHandler = new Handler(Looper.getMainLooper());

final Runnable SCROLLING_RUNNABLE = new Runnable() {

@Override

public void run() {

recyclerView.smoothScrollBy(pixelsToMove, 0);

mHandler.postDelayed(this, duration);

}

};

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

@Override

public void onScrolled(final RecyclerView recyclerView, int dx, int dy) {

super.onScrolled(recyclerView, dx, dy);

int lastItem = horizontalLayoutManager.findLastCompletelyVisibleItemPosition();

if(lastItem == horizontalLayoutManager.getItemCount()-1){

mHandler.removeCallbacks(SCROLLING_RUNNABLE);

Handler postHandler = new Handler();

postHandler.postDelayed(new Runnable() {

@Override

public void run() {

recyclerView.setAdapter(null);

recyclerView.setAdapter(adapter_hgv);

mHandler.postDelayed(SCROLLING_RUNNABLE, 2000);

}

}, 2000);

}

}

});

mHandler.postDelayed(SCROLLING_RUNNABLE, 2000);

/*** END HSV AUTO SCROLL***/

我的自定义RecycleView类:

class CustomAdapter_HGV extends RecyclerView.Adapter {

private ArrayList arrayListString_MainImages_HGV;

private LayoutInflater mInflater;

private ItemClickListener mClickListener;

// data is passed into the constructor

CustomAdapter_HGV(Context context, ArrayList mainImages) {

this.mInflater = LayoutInflater.from(context);

this.arrayListString_MainImages_HGV = mainImages;

}

// inflates the row layout from xml when needed

@Override

@NonNull

public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

View view = mInflater.inflate(R.layout.recyclerview_item, parent, false);

return new ViewHolder(view);

}

// binds the data to the view and textview in each row

@Override

public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

String mainImage = arrayListString_MainImages_HGV.get(position);

Context mContext = holder.ivHorizontalGrid.getContext();

Picasso.with(mContext).load(mainImage).placeholder(R.drawable.loading).error(R.drawable.error).into(holder.ivHorizontalGrid);

}

// total number of rows

@Override

public int getItemCount() {

return arrayListString_MainImages_HGV.size();

}

// stores and recycles views as they are scrolled off screen

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

ImageView ivHorizontalGrid;

ViewHolder(View itemView) {

super(itemView);

ivHorizontalGrid = itemView.findViewById(R.id.ivHorizontalGrid);

itemView.setOnClickListener(this);

}

@Override

public void onClick(View view) {

if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());

}

}

// convenience method for getting data at click position

public String getItem(int id) {

return arrayListString_MainImages_HGV.get(id);

}

// allows clicks events to be caught

public void setClickListener(ItemClickListener itemClickListener) {

this.mClickListener = itemClickListener;

}

// parent activity will implement this method to respond to click events

public interface ItemClickListener {

void onItemClick(View view, int position);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值