chenjinlong 2020-05-05
今天来写一篇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 = 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了。而且他们的大小相同,所以就解决了。
写这个是因为我遇到问题百度了一个多小时,就是找不到解决方法。于是就自己解决了一下,顺便发了个博客帮助下同样的小伙伴,要是觉得可以,点个关注哦~