标签: recycler-adapter

如何自动向上滚动Android中的Recycler视图?

我开发了一些聊天应用程序,我可以发送和接收消息.但问题是每当我发送或接收消息时,回收站视图都不会滚动到顶部,以便消息显示在键盘上方.

我使用了上面提到的回收站视图android.support.v7.widget.RecyclerView.

android android-activity recycler-adapter android-recyclerview

15
推荐指数
2
解决办法
3万
查看次数

关于滚动值的Recyclerview从适配器更改

我正在开发一个应用程序,我正在尝试使用RecyclerView和recycler适配器填充列表.但是当我快速滚动列表时,有时列表项中的值会在列表项之间进行洗牌.这有一个已知的解决方案吗?

android recycler-adapter android-recyclerview

15
推荐指数
4
解决办法
8684
查看次数

如何在RecyclerView中突出显示所选项目

我已经使用RecyclerView在我的图像编辑应用程序中显示缩略图.它的每个项目都包含一个ImageView(缩略图)和一个textView.在我的应用程序中,我想在点击时仅突出显示当前选定的缩略图.浏览SO上的所有相关帖子但找不到更好的解决方案.

我的适配器类

    public class FiltersAdapter extends RecyclerView.Adapter<FiltersAdapter.ViewHolder> {

    private Context mContext;
    private List<Type> mDataSet;
    private Uri selectedPhoto;

    public enum Type {
        Original,
        Grayscale,
        Sepia,
        Contrast,
        Invert,
        Pixel,
        Sketch,
        Swirl,
        Brightness,
        Vignette
    }

    public FiltersAdapter(Context context, List<Type> dataSet, Uri selectedPhoto) {
        mContext = context;
        mDataSet = dataSet;
        this.selectedPhoto = selectedPhoto;
    }

    @Override
    public FiltersAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.list_item_layout, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(FiltersAdapter.ViewHolder holder, int position) {
        switch (mDataSet.get(position)) …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

15
推荐指数
3
解决办法
3万
查看次数

是否有任何Observers在RecyclerView.Adapter中编写,以了解数据集是否已更改?

RecyclerView用它实现了Custom Adapter如下

全球宣言如下

private LinearLayoutManager linearLayoutManager;
private int pastVisibleItems, visibleItemCount, totalItemCount;
private CustomRecyclerViewAdapter customRecyclerViewAdapter;
Run Code Online (Sandbox Code Playgroud)

首先,我在onCreate()方法内部创建了适配器实例,其中包含Empty Array并将其设置为recyclerView

linearLayoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(linearLayoutManager);
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(
    Utility.ItemDecorationConst);
recyclerView.addItemDecoration(dividerItemDecoration);
customRecyclerViewAdapter = new CustomRecyclerViewAdapter(getActivity());

recyclerView.setAdapter(customRecyclerViewAdapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

    visibleItemCount = linearLayoutManager.getChildCount();
    totalItemCount = linearLayoutManager.getItemCount();
    pastVisibleItems = linearLayoutManager.findFirstVisibleItemPosition();
    if (loading) {
        if ((visibleItemCount + pastVisibleItems) >= totalItemCount) {
            loading = false;
            customRecyclerViewAdapter.addProgressBarEntry();
            controller.getNextPage(PublisherAppContainerFragment.this);
        }
    } …
Run Code Online (Sandbox Code Playgroud)

android observers notifydatasetchanged recycler-adapter android-recyclerview

14
推荐指数
2
解决办法
5109
查看次数

RecyclerView在聊天屏幕中的notifyDataSetChanged上滚动到顶部

我正在尝试使用recyclelerView创建消息类型的屏幕,它将从底部开始,并在用户到达聊天的最高端时加载更多数据.但我正面临着这个奇怪的问题.

我的recyclerView在调用notifyDataSetChanged时滚动到顶部.由于这个onLoadMore被多次调用.

这是我的代码:

LinearLayoutManager llm = new LinearLayoutManager(context);
llm.setOrientation(LinearLayoutManager.VERTICAL);
llm.setStackFromEnd(true);
recyclerView.setLayoutManager(llm);
Run Code Online (Sandbox Code Playgroud)

**在适配器中

 @Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (messages.size() > 8 && position == 0 && null != mLoadMoreCallbacks) {
        mLoadMoreCallbacks.onLoadMore();
    }
Run Code Online (Sandbox Code Playgroud)

**在活动中

@Override
public void onLoadMore() {
    // Get data from database and add into arrayList
      chatMessagesAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

这只是recyclerView滚动到顶部.如果滚动到顶部停止,则此问题将得到解决.请帮我弄清楚这个问题的原因.提前致谢.

android notifydatasetchanged recycler-adapter android-recyclerview linearlayoutmanager

14
推荐指数
2
解决办法
8027
查看次数

使用多种视图类型在recyclerview中滚动到底部

我有一个包含多个项目的recyclerview.和recyclerview有不同的视图类型和不同的高度..

所以这些是我尝试过的

recyclerview.scrollToPosition(adapterWrapper.getAdapter().getItemCount()-1);
Run Code Online (Sandbox Code Playgroud)

app:layoutManager="LinearLayoutManager"
app:stackFromEnd="true"
Run Code Online (Sandbox Code Playgroud)

当我将它们应用于单一视图类型时,它们对我很有用.但是在多视图类型中.它不是滚动到底部.它被困在底部之前的9个项目中.

我以前stackFromBottom在listview 中使用它工作正常..

那么在recyclerview中它的解决方案是什么?

它实际上是一个聊天应用程序,具有不同类型的布局,包括图像,GIF等.

RecyclerAdapter代码,

package com.buckydroid.anonchat.Adapters;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.URLUtil;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import android.widget.Toast;

import com.buckydroid.anonchat.Async.DownloadManager;
import com.buckydroid.anonchat.Chatroom.ChatRoom;
import com.buckydroid.anonchat.Pages.FullScreenImageView;
import com.buckydroid.anonchat.Pages.Profile;
import com.buckydroid.anonchat.Pages.VideoPlayer;
import com.buckydroid.anonchat.R;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
import com.bumptech.glide.request.target.Target;
import com.firebase.client.DataSnapshot;
import com.firebase.client.Firebase;
import com.firebase.client.FirebaseError;
import com.firebase.client.ValueEventListener; …
Run Code Online (Sandbox Code Playgroud)

java android admob recycler-adapter android-recyclerview

14
推荐指数
2
解决办法
982
查看次数

RecyclerView与不同的Cardlayouts

我想做什么


此刻,我正在RecyclerView和我一起玩CardView.现在我写了一个RecyclerView.Adapter,我可以用不同的内容多次显示相同的CardView - 类似于ListViewa BaseAdapter.

现在我想写一个RecyclerView不同CardView-Layout的(以Google Now的风格).我已经搜索了教程,但没有发现有关该主题的任何有用信息.有人知道,这需要如何实施?要意识到这一点需要做些什么?

android android-cardview recycler-adapter android-recyclerview

13
推荐指数
1
解决办法
9018
查看次数

Lint错误"不要将位置视为固定;只能立即使用......"

我正在为开源库做贡献并得到lint错误"不要将位置视为已修复;只能立即使用并调用holder.getAdapterPosition()以便稍后查找"以获取此代码:

  @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    mAdapter.onBindViewHolder(holder, position);

    if (!isFirstOnly || position > mLastPosition) {
      for (Animator anim : getAnimators(holder.itemView)) {
        anim.setDuration(mDuration).start();
        anim.setInterpolator(mInterpolator);
      }
      mLastPosition = position;
    } else {
      ViewHelper.clear(holder.itemView);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我已经检查过这是因为保存位置以备将来使用.图书馆创建者为什么需要这种逻辑是一个问题.但是当我将位置的使用更改为用法时,问题就消失了holder.getAdapterPosition():

  @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    mAdapter.onBindViewHolder(holder, position);

    if (!isFirstOnly || holder.getAdapterPosition() > mLastPosition) {
      for (Animator anim : getAnimators(holder.itemView)) {
        anim.setDuration(mDuration).start();
        anim.setInterpolator(mInterpolator);
      }
      mLastPosition = holder.getAdapterPosition();
    } else {
      ViewHelper.clear(holder.itemView);
    }
  }
Run Code Online (Sandbox Code Playgroud)

我认为从概念上讲它并没有太大变化,但现在皮棉很满意.为什么?

android lint recycler-adapter

13
推荐指数
1
解决办法
6197
查看次数

RecyclerView错误的位置设置onBindViewHolder

首先,我的RecyclerView项目没问题,但在滚动时,项目显示在错误的位置,例如:项目6显示在位置67.虽然onClick listener和getAdapterPosition()工作正常并显示正确的项目.为什么?

import android.content.Context;
import android.graphics.Typeface;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.neganet.darotabii.R;
import com.neganet.darotabii.beans.headers_Bean;
import java.util.List;
public class FSecAdapter2 extends RecyclerView.Adapter<FSecAdapter2.mViewHolder> {

    private static List<headers_Bean> items_t;
    private static int secNo;
    private Typeface font;
    private boolean showSoreName;
    private static Context mContext;
    private static String ?olorString;

  private static String fSubjectText="";
    private static Static_Datas static_datas;
    private static QDataGetter dataGetter;

public FSecAdapter2(List<headers_Bean> t_items, Context cnt, int secNo) {
            setHasStableIds(true);

            this.mContext=cnt;
            this.items_t = t_items;
            this.static_datas=new Static_Datas(mContext);
            this.secNo=secNo;
         }

        public …
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

13
推荐指数
3
解决办法
6511
查看次数

java.lang.IllegalStateException:已在池中

在回收物品时,我在回收者视图上的产品上遇到这种奇怪的崩溃,而且我也无法重现此崩溃。

  Fatal Exception: java.lang.IllegalStateException: Already in the pool!
   at androidx.core.util.Pools$SimplePool.release(Pools.java:117)
   at androidx.recyclerview.widget.AdapterHelper.recycleUpdateOp(AdapterHelper.java:743)
   at androidx.recyclerview.widget.AdapterHelper.recycleUpdateOpsAndClearList(AdapterHelper.java:750)
   at androidx.recyclerview.widget.AdapterHelper.consumePostponedUpdates(AdapterHelper.java:123)
   at androidx.recyclerview.widget.AdapterHelper.consumeUpdatesInOnePass(AdapterHelper.java:557)
   at androidx.recyclerview.widget.RecyclerView.processAdapterUpdatesAndSetAnimationFlags(RecyclerView.java:3585)
   at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:3829)
   at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3639)
   at androidx.recyclerview.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1877)
   at androidx.recyclerview.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:5044)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092)
   at android.view.Choreographer.doCallbacks(Choreographer.java:893)
   at android.view.Choreographer.doFrame(Choreographer.java:809)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078)
   at android.os.Handler.handleCallback(Handler.java:891)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:207)
   at android.app.ActivityThread.main(ActivityThread.java:7539)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
Run Code Online (Sandbox Code Playgroud)

android recycler-adapter android-recyclerview

12
推荐指数
1
解决办法
647
查看次数