【Android 踩坑日记 - RecyclerView 布局问题】千金一刻莫空度,老大无成空自伤。这篇文章主要讲述Android 踩坑日记 - RecyclerView 布局问题相关的知识,希望能为你提供帮助。
android 踩坑日记(05/05/20) - RecyclerView
Overview今天来写一篇Android RecyclerView的踩坑日记,这个非常的特别,那么我们现在来看看这是个啥问题把。
问题在什么地方看图!
文章图片
可以看到这个非常尴尬的问题就是要消失的item会划出界面。**
看看需要啥样的
文章图片
这个就是我们所需要的效果。
问题所在是不是都以为是Recyclerview 适配器或者属性问题,但是我研究了一波,发现不是。
这样显示看看代码:
package com.example.wanandroidapp_master.adpater.RecyclerView;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.wanandroidapp_master.R;
import com.example.wanandroidapp_master.model.entity.ArticleEntity;
import java.util.List;
/**
* Date 4/29/2020
* Author CaoJiaHao
* Description ${Description}
**/
public class HomePage_RecyclerViewAdapter extends RecyclerView.Adapter<
HomePage_RecyclerViewAdapter.ViewHolder>
{
private Context mContext;
private List<
ArticleEntity.articleInfo>
mData;
private TextView txtTitle;
private TextView txtAuthor;
private LinearLayout linearLayout;
public HomePage_RecyclerViewAdapter(Context mContext, List<
ArticleEntity.articleInfo>
mData) {
this.mContext = mContext;
this.mData = https://www.songbingjia.com/android/mData;
}@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(mContext).inflate(R.layout.recommended_article_layout, parent, false));
return viewHolder;
}@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
txtTitle.setText(mData.get(position).getTitle());
txtTitle.setTag(mData.get(position).getLink());
txtAuthor.setText("
作者:"
+ mData.get(position).getAuthor() + mData.get(position).getShareUser());
linearLayout.removeAllViews();
LinearLayout.LayoutParams lp = new
LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(6, 0, 0, 0);
for (ArticleEntity.tags tag : mData.get(position).getTags()) {
TextView txtTag = new TextView(mContext);
txtTag.setBackground(mContext.getResources().getDrawable(R.drawable.article_tag_background));
txtTag.setText(tag.getName());
txtTag.setTextSize(10f);
txtTag.setLayoutParams(lp);
txtTag.setTextColor(Color.WHITE);
linearLayout.addView(txtTag);
}
}@Override
public int getItemCount() {
return mData.size();
}@Override
public int getItemViewType(int position) {
return position;
}@Override
public long getItemId(int position) {
return super.getItemId(position);
}public class ViewHolder extends RecyclerView.ViewHolder {public ViewHolder(View itemView) {
super(itemView);
txtTitle = itemView.findViewById(R.id.recommendedArticle_txtArticleName);
txtAuthor = itemView.findViewById(R.id.recommendedArticle_txtAuthor);
linearLayout = itemView.findViewById(R.id.recommendedArticle_LinearLayout);
}
}}
这个就是适配器的代码。
没有问题
所以就是布局问题了。。。
看看问题代码:
<
?xml version="
1.0"
encoding="
utf-8"
?>
<
androidx.constraintlayout.widget.ConstraintLayout xmlns:android="
http://schemas.android.com/apk/res/android"
xmlns:app="
http://schemas.android.com/apk/res-auto"
android:layout_width="
match_parent"
android:layout_height="
match_parent"
android:background="
@android:color/white"
android:clipChildren="
false"
android:orientation="
vertical"
>
<
com.lany.banner.BannerView
android:id="
@+id/homePage_BannerView"
android:layout_width="
match_parent"
android:layout_height="
0dp"
android:layout_marginBottom="
8dp"
app:banner_delayTime="
5000"
app:banner_indicatorGravity="
center"
app:banner_indicatorMargin="
4dp"
app:banner_indicatorType="
circle_indicator_title_inside"
app:banner_isAutoPlay="
true"
app:banner_scaleType="
fitXY"
app:banner_scrollTime="
1000"
app:banner_titleBackground="
#50000000"
app:banner_titleTextColor="
#ffffff"
app:banner_titleTextSize="
12sp"
app:layout_constraintBottom_toTopOf="
@+id/guideline3"
app:layout_constraintEnd_toEndOf="
parent"
app:layout_constraintStart_toStartOf="
parent"
app:layout_constraintTop_toTopOf="
parent"
/>
<
androidx.recyclerview.widget.RecyclerView
android:id="
@+id/homePage_RecyclerView"
android:layout_width="
match_parent"
android:layout_height="
0dp"
app:layout_constraintBottom_toBottomOf="
parent"
app:layout_constraintStart_toStartOf="
@+id/homePage_BannerView"
app:layout_constraintTop_toTopOf="
@+id/guideline3"
/>
<
androidx.constraintlayout.widget.Guideline
android:id="
@+id/guideline3"
android:layout_width="
wrap_content"
android:layout_height="
wrap_content"
android:orientation="
horizontal"
app:layout_constraintGuide_percent="
0.25"
/>
<
/androidx.constraintlayout.widget.ConstraintLayout>
问题代码!
<
?xml version="
1.0"
encoding="
utf-8"
?>
<
androidx.constraintlayout.widget.ConstraintLayout xmlns:android="
http://schemas.android.com/apk/res/android"
xmlns:app="
http://schemas.android.com/apk/res-auto"
android:layout_width="
match_parent"
android:layout_height="
match_parent"
android:background="
@android:color/white"
android:clipChildren="
false"
android:orientation="
vertical"
>
<
com.lany.banner.BannerView
android:id="
@+id/homePage_BannerView"
android:layout_width="
match_parent"
android:layout_height="
0dp"
android:layout_marginBottom="
8dp"
app:banner_delayTime="
5000"
app:banner_indicatorGravity="
center"
app:banner_indicatorMargin="
4dp"
app:banner_indicatorType="
circle_indicator_title_inside"
app:banner_isAutoPlay="
true"
app:banner_scaleType="
fitXY"
app:banner_scrollTime="
1000"
app:banner_titleBackground="
#50000000"
app:banner_titleTextColor="
#ffffff"
app:banner_titleTextSize="
12sp"
app:layout_constraintBottom_toTopOf="
@+id/guideline3"
app:layout_constraintEnd_toEndOf="
parent"
app:layout_constraintStart_toStartOf="
parent"
app:layout_constraintTop_toTopOf="
parent"
/>
<
LinearLayout
android:layout_width="
match_parent"
android:layout_height="
0dp"
app:layout_constraintBottom_toBottomOf="
parent"
app:layout_constraintEnd_toEndOf="
parent"
app:layout_constraintStart_toStartOf="
parent"
app:layout_constraintTop_toTopOf="
@+id/guideline3"
>
<
androidx.recyclerview.widget.RecyclerView
android:id="
@+id/homePage_RecyclerView"
android:layout_width="
match_parent"
android:layout_height="
match_parent"
/>
<
/LinearLayout>
<
androidx.constraintlayout.widget.Guideline
android:id="
@+id/guideline3"
android:layout_width="
wrap_content"
android:layout_height="
wrap_content"
android:orientation="
horizontal"
app:layout_constraintGuide_percent="
0.25"
/>
<
/androidx.constraintlayout.widget.ConstraintLayout>
正确代码!
解决方法
<
LinearLayout
android:layout_width="
match_parent"
android:layout_height="
0dp"
app:layout_constraintBottom_toBottomOf="
parent"
app:layout_constraintEnd_toEndOf="
parent"
app:layout_constraintStart_toStartOf="
parent"
app:layout_constraintTop_toTopOf="
@+id/guideline3"
>
<
androidx.recyclerview.widget.RecyclerView
android:id="
@+id/homePage_RecyclerView"
android:layout_width="
match_parent"
android:layout_height="
match_parent"
/>
<
/LinearLayout>
就是我在外面添加了一个LinearLayout...
这样Recyclerview的父容器就是那个LinearLauout了。而且他们的大小相同,所以就解决了。
写这个是因为我遇到问题百度了一个多小时,就是找不到解决方法。于是就自己解决了一下,顺便发了个博客帮助下同样的小伙伴,要是觉得可以,点个关注哦~
推荐阅读
- HTML Application Cache 离线应用
- Android ImageButton 点击变按钮图片
- android使用service
- 如何找到Hive提交的SQL相对应的Yarn程序的applicationId
- Vue webAPP首页开发
- uni-app APP-PLUS 获取客户端信息 clientid 等
- C# Dapper基本三层架构使用 (DAL)
- appendChild is not a function
- Android config Android.mk parameter