我开发了一些聊天应用程序,我可以发送和接收消息.但问题是每当我发送或接收消息时,回收站视图都不会滚动到顶部,以便消息显示在键盘上方.
我使用了上面提到的回收站视图android.support.v7.widget.RecyclerView.
android android-activity recycler-adapter android-recyclerview
我正在开发一个应用程序,我正在尝试使用RecyclerView和recycler适配器填充列表.但是当我快速滚动列表时,有时列表项中的值会在列表项之间进行洗牌.这有一个已知的解决方案吗?
我已经使用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) 我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
我正在尝试使用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
我有一个包含多个项目的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) 我想做什么
此刻,我正在RecyclerView和我一起玩CardView.现在我写了一个RecyclerView.Adapter,我可以用不同的内容多次显示相同的CardView - 类似于ListViewa BaseAdapter.
现在我想写一个RecyclerView不同CardView-Layout的(以Google Now的风格).我已经搜索了教程,但没有发现有关该主题的任何有用信息.有人知道,这需要如何实施?要意识到这一点需要做些什么?
android android-cardview recycler-adapter android-recyclerview
我正在为开源库做贡献并得到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)
我认为从概念上讲它并没有太大变化,但现在皮棉很满意.为什么?
首先,我的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) 在回收物品时,我在回收者视图上的产品上遇到这种奇怪的崩溃,而且我也无法重现此崩溃。
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)