- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的问题是 Recycler View 上下滚动
这里是我如何在 Fragment 中设置 My Recycler View 。
private void setRecyclerView() {
recyclerView.setHasFixedSize(true);
StaggeredGridLayoutManager layoutManager =
new StaggeredGridLayoutManager(2, 1);
recyclerView.setLayoutManager(layoutManager);
adapter = new TwitterTweetAdapter(getActivity());
// setting every thing false in item animator
recyclerView.setItemAnimator(new RecyclerView.ItemAnimator() {
@Override
public void runPendingAnimations() {
}
@Override
public boolean animateRemove(RecyclerView.ViewHolder viewHolder) {
return false;
}
@Override
public boolean animateAdd(RecyclerView.ViewHolder viewHolder) {
return false;
}
@Override
public boolean animateMove(RecyclerView.ViewHolder viewHolder, int i, int i2, int i3, int i4) {
return false;
}
@Override
public boolean animateChange(RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder viewHolder2, int i, int i2, int i3, int i4) {
return false;
}
@Override
public void endAnimation(RecyclerView.ViewHolder viewHolder) {
}
@Override
public void endAnimations() {
}
@Override
public boolean isRunning() {
return false;
}
});
recyclerView.setAdapter(adapter);
}
这是我的适配器类
在我的适配器中,我正在设置一个标题
//我的ViewHolders
class Header extends RecyclerView.ViewHolder {
@Bind(R.id.feed_head)
CardView feedHeader;
@Bind(R.id.feed_header_count)
TextView userCount;
@Bind(R.id.feed_header_text)
TextView userText;
public TwitterHeader(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
public static class RowViewHolder extends RecyclerView.ViewHolder {
@Bind(R.id.feed_row_view)
CardView feedRow;
@Bind(R.id.feed_image)
ImageView feedImage;
@Bind(R.id.video_play_icon)
ImageButton playButton;
@Bind(R.id.feed_description)
TextView feedDescription;
@Bind(R.id.feed_user_image)
ImageView userImage;
@Bind(R.id.feed_user_name)
TextView userName;
@Bind(R.id.feed_time)
TextView feedDate;
@Bind(R.id.feed_progress_bar)
ProgressBar progressBar;
public RowViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
//变量声明
private static final int TYPE_HEADER = 0;
private static final int TYPE_FEED = 1;
Context context;
private Activity activity;
private List<MockData> dataLists;
public static List<MockData> dataListsupdated;
int userSearchCount;
//构造函数
public FeedAdapter(Activity activity) {
this.activity = activity;
}
//设置数据列表
public void setDataList(List<MockData> dataLists, int userSearchCount, float density) {
this.dataLists = dataLists;
this.density = density;
this.userSearchCount = userSearchCount;
}
//onCreateViewHolder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if (viewType == TYPE_HEADER) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.feed_header, viewGroup, false);
return new Header(view);
} else {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.feed_row, viewGroup, false);
return new RowViewHolder(v);
}
}
//onBindViewHolder 我将我的 View 与数据绑定(bind)。
if (holder instanceof Header) {
Header header = (Header) holder;
if (userSearchCount == 20) {
header.userCount.setText(R.string.twitter_default_count);
} else {
header.userCount.setText(userSearchCount);
}
header.userText.setText(R.string.user);
header.feedHeader.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(activity, TwitterSearchActivity.class);
activity.startActivity(intent);
}
});
} else {
if (holder instanceof RowViewHolder) {
final RowViewHolder rowViewHolder = (RowViewHolder) holder;
final MockData responseList = dataLists.get(position);
rowWidth = rowViewHolder.feedImage.getWidth();
rowViewHolder.playButton.setVisibility(View.GONE);
if (responseList.text.startsWith("RT")) {
rowViewHolder.feedRow.setVisibility(View.GONE);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0, 0, 0, 0);
rowViewHolder.feed.setLayoutParams(params);
} else {
setRowImage(rowViewHolder, responseList);
rowViewHolder.feedDescription.setText(responseList.text);
rowViewHolder.userImage.setVisibility(View.VISIBLE);
Glide.with(activity)
.load(responseList.user.profileImageUrlHttps)
.into(rowViewHolder.userImage);
rowViewHolder.userName.setText(responseList.user.screenName);
Date date = new Date(responseList.createdAt);
DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(activity.getApplicationContext());
rowViewHolder.feedDate.setText(dateFormat.format(date));
rowViewHolder.feedRow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(position);
}
});
}
}
}
}
//设置行图像。
private void setRowImage(RowViewHolder rowViewHolder, Tweet responseList) {
if (responseList.entities.media != null) {
MediaEntity mediaEntity = responseList.entities.media.get(0);
if (mediaEntity.mediaUrlHttps != null) {
int height = mediaEntity.sizes.medium.h;
int width = mediaEntity.sizes.medium.w;
int ratio = width / 143;
int newHeight = (int) ((height / ratio) * density);
Glide.with(activity)
.load(mediaEntity.mediaUrlHttps)
.override(width, newHeight)
.placeholder(R.color.colorAccent)
.into(rowViewHolder.feedImage);
} else {
rowViewHolder.feedImage.setImageDrawable(null);
}
} else {
rowViewHolder.feedImage.setImageDrawable(null);
}
}
//查看条件以设置标题和行。
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position))
return TYPE_HEADER;
return TYPE_FEED;
}
private boolean isPositionHeader(int position) {
return position == 0;
}
@Override
public int getItemCount() {
return dataLists == null ? 0 : dataLists.size();
}
最佳答案
我的应用程序中有一个非常相似的适配器,我在其中显示来自 Facebook 而不是 Twitter 的提要,首先,切换到 Glide 而不是 Picasso,因为它使用 RecyclerView 提供了更好的缓存和图像加载,检查 THIS .所以现在来解决你的问题,第一步在你的适配器上调用 setHasStableIds(true) ,覆盖 getItemId 方法以从你的适配器返回一个合适的长,因为你使用的是一个提要,你可以计算一个散列说 postId 或一些唯一标识提要中每个帖子的字段。我的提要也有一个可选图像,这就是为什么我有这两种方法
public void setProfilePicture(String uri) {
//As per the solution discussed here http://stackoverflow.com/questions/32706246/recyclerview-adapter-and-glide-same-image-every-4-5-rows
if (uri != null) {
Glide.with(mContext)
.load(uri)
.asBitmap()
.transform(new CropCircleTransform(mContext))
.into(mProfilePicture);
} else {
Glide.clear(mProfilePicture);
mProfilePicture.setImageResource(R.drawable.com_facebook_profile_picture_blank_square);
}
}
public void setPostPicture(String uri) {
//As per the solution discussed here http://stackoverflow.com/questions/32706246/recyclerview-adapter-and-glide-same-image-every-4-5-rows
if (uri != null) {
Glide.with(mContext)
.load(uri)
.asBitmap()
.transform(new CropTransformation(mContext, mPostImageWidth, mPostImageHeight))
.into(mPostPicture);
} else {
Glide.clear(mPostPicture);
mPostPicture.setImageDrawable(null);
}
}
然后您要做的就是从您的 onBindViewHolder 调用这些方法来设置图像。帖子是我的对象,它包含单个帖子的详细信息,例如姓名、用户 ID、人物图片的图像 url 和帖子图片的图像 url,这是可选的。如果您进一步遇到任何问题,请告诉我。
@Override
public void onBindViewHolder(ItemHolder holder, int position) {
Post post = mResults.get(position);
holder.setUserName(post.getUserName());
holder.setUpdatedTime(post.getUpdatedTime());
holder.setMessage(post.getMessage(), mState, position);
holder.setPostPicture(post.getPicture());
holder.setProfilePicture(post.getUserPicture());
// Check for an expanded view, collapse if you find one
}
关于android - RecyclerView 的行正在洗牌并更改图像 : android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33579542/
我在另一个 RecyclerView(parentRecyclerView) 中实现了 RecyclerView(childRecyclerView),图片说明了所有的实现: 我想编写一个 espre
我正在构建一个应用程序,它使用ViewPager2在页面之间水平滚动,每个页面都有一个垂直滚动的内容RecyclerView,其中每个列表的第一个位置都有一行水平滚动小部件,例如附加到寻呼机指示器类型
我正在尝试实现一个水平的 recyclerview 并且 recyclerview 的每个项目都将是一个具有网格布局的垂直 recyclerview。我面临的问题是,当我尝试垂直滚动子 recycle
我使用显示条目列表的 RecyclerView。每个条目都托管另一个 RecyclerView,它是一个图像列表。 我现在想让这个嵌套的 RecyclerView 可点击,而不是它的项目,而是整个 V
我正在尝试将手机中的图像加载到我的回收 View 中。 到目前为止,我已经创建了一个 recyclerview.adapter 和一个 gridlayoutmanager,并将它们附加到我的 recy
我需要一个可扩展 View ,其中父/可扩展标题将具有文本和下拉箭头。每个此类标题的子项应该是在网格结构中具有多个项目的 View 。 (有点像带有 GridLayoutManager 的回收器 Vi
我正在使用显示不同类别列表的 RecyclerView。每行项目还包含 RecyclerView 以显示类别项目列表。父级 RecyclerView 由垂直 LinearLayoutManager 填
我正在更新一个旧的 Android 项目,现在我从 RecyclerView 中反复收到这条日志语句: W/RecyclerView:RecyclerView 不支持滚动到绝对位置。改为使用 scro
在我的 Adapter 中,我调用 LayoutManager.ChildAt(position) 来获取 itemview,但是我得到的 View 不是匹配的 itemview,当我调用 notif
我正在从 ListView 迁移到 RecyclerView,但是在 SQLite 中输入一些数据后,我的列表没有使用 notifyDataSetChanged() 更新;所以我总是要调用setAda
我正在用 Google Now Cards 的风格创建一组 5 张卡片。我首先关注的是总体布局。 我正在使用 CardView 和 RecyclerView ,我想要实现的是这样的: 这是我的 Car
在我的应用程序中,我有一个 RecyclerView,其中包含一个简单的项目 View ,每行包含一个 TextView 和一个 Spinner。 用户从操作栏中单击“保存”后,我需要遍历所有项目并获
我正在尝试检查 RecyclerView 中是否可以看到某些特定项目;但我无法实现。请帮助我确定我的项目是否在 RecyclerView 中完全可见。 mrecylerView.addOnScroll
我有一个提要片段,它的主要元素是帖子的 RecyclerView。 我正在使用 Lisa Wray 的 Groupie 库管理回收站 https://github.com/lisawray/group
我有这两个类似的行为回收器 View 适配器,它们之间的唯一区别是 onclick 方法和传递给它们的对象。所以,我正在考虑将类 B 设计为从回收器 View 适配器继承,这样我就可以更改构造函数来执
这很奇怪。我对这个问题感到沮丧。我将数据保存在 ArrayList 中。当我将数据放在 RecyclerView 上时。数据未显示在列表中。这是我的代码 listOrder.forEach { ord
编辑我通过使用 CoordinatorLayout 和 AppBarLayout 作为 header 和 TabLayout 的包装解决了这个问题。本来应该很明显,但是哦,好吧。 原始问题:我有一个设
我有一个回收 View 。我想从其适配器类更新回收器 View 。我尝试了 notiftDataSetChanged( ) 但它只适用于主类。下面是 recyclerview 适配器类的代码。 pac
我正在使用具有不同 viewholders 的 recyclerview(具有垂直 LinearLayout),其中一个有另一个 RecyclerView(带有水平 LL)。在第二个 recycler
我想创建一个与 Google Play Store 或 Netflix App 类似的布局,其中在单个 RecyclerView 中基本上有多个水平 RecyclerView。如果这不是他们做事的方式
我是一名优秀的程序员,十分优秀!