java - RecycleView 一开始只显示一些项目,之后当我添加新项目时没有显示它们?
问题描述
当我在开始时添加一些项目时,我的代码可以工作,但是在 1、2 或 3 个项目之后,它没有显示新项目,而是继续显示旧项目。
回收视图类:
public class FilmateShikuara {
private String Emri;
private Double Rating;
private Bitmap Image;
public String getEmri() {
return Emri;
}
public Double getRating() {
return Rating;
}
public Bitmap getImage() {
return Image;
}
public FilmateShikuara(String emri, Double rating, Bitmap image) {
Emri = emri;
Rating = rating;
Image = image;
}
public void setEmri(String emri) {
Emri = emri;
}
public void setRating(Double rating) {
Rating = rating;
}
public void setImage(Bitmap image) {
Image = image;
}
}
RecycleView 适配器:
public class WatchedfilmsAdapter extends RecyclerView.Adapter<WatchedfilmsAdapter.MyViewHolder>{
private Context mContext;
private List<FilmateShikuara> mData;
public WatchedfilmsAdapter(Context mContext, List<FilmateShikuara> mData) {
this.mContext = mContext;
this.mData = mData;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater inflater=LayoutInflater.from(mContext);
View view=inflater.inflate(R.layout.layout_product,null);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.movieImage.setImageBitmap(mData.get(i).getImage());
myViewHolder.movieName.setText(mData.get(i).getEmri());
String rating=mData.get(i).getRating().toString();
myViewHolder.movieRating.setText(rating);
}
@Override
public int getItemCount() {
return mData.size();
}
static class MyViewHolder extends RecyclerView.ViewHolder{
ImageView movieImage;
TextView movieName;
TextView movieRating;
MyViewHolder(@NonNull View itemView) {
super(itemView);
movieImage=(ImageView)itemView.findViewById(R.id.MovieImage);
movieName=(TextView)itemView.findViewById(R.id.MovieName);
movieRating=(TextView)itemView.findViewById(R.id.Movie_Rating);
}
}
}
布局类:
public class Watched_MoviesList extends AppCompatActivity{
List<FilmateShikuara> productList;
SQLiteDatabase db;
FilmaDb dbHelper;
RecyclerView recyclerView;
static WatchedfilmsAdapter adapterW;
ImageView homeIcon;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_watched__movies_list);
homeIcon=(ImageView)findViewById(R.id.HomeIcon);
homeIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(v.getContext(),MainActivity.class);
startActivity(intent);
}
});
dbHelper=new FilmaDb(this,"Filma_db",null,2);
db=dbHelper.getWritableDatabase();
productList=new ArrayList<>();
recyclerView= findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
ReadData();
adapterW=new WatchedfilmsAdapter(this,productList);
recyclerView.setAdapter(adapterW);
}
public void ReadData()
{
Cursor c=db.rawQuery("SELECT * FROM WatchedMovie",null);
while (c.moveToNext())
{
String moviename=c.getString(c.getColumnIndex("Emri"));
Double rate=c.getDouble(c.getColumnIndex("Rate"));
byte[] image=c.getBlob(c.getColumnIndex("Photo"));
Bitmap bitmap=BitmapFactory.decodeByteArray(image,0,image.length);
productList.add(new FilmateShikuara(moviename,rate,bitmap));
}
c.close();
}
}
xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Watched_MoviesList"
android:background="#1E1E2C">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:background="#141421"
android:clickable="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:layout_marginLeft="10dp"
android:layout_marginTop="12dp"
android:text="Watched movies"
android:textColor="@android:color/white"
android:textSize="20sp"
android:fontFamily="@font/roboto_bold"
android:textStyle="bold"/>
<ImageView
android:id="@+id/HomeIcon"
android:layout_width="29dp"
android:layout_height="29dp"
android:layout_alignParentRight="true"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:layout_alignParentEnd="true"
android:background="@drawable/edithomeicon"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/editlinearlayout"
android:layout_margin="0dp">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
解决方案
将新数据添加到列表调用后adapter.notifyDataSetChanged();
,还将显示您的新数据
推荐阅读
- reactjs - 在 componentDidMount 中模拟 API 调用方法
- scala - Flink AssignerWithPeriodicWatermarks getCurrentWatermark 永远不会被调用
- angular - 如何在Angular中显示文本区域内的当前字符数?
- azure-durable-functions - 使用持久实体是存储工作流结果的好方法吗?
- bootstrap-4 - Bootstrap 4 导航栏,带有居中的文本简介
- esp32 - 最大 tcp 客户端连接数不增加
- oracle - 具有 2 个不同数据库(Oracle 和 postgresql)的 Jasper 报告
- python - 递归跳跃游戏
- python - 未找到 Python 包导入图像 MacOS
- java - 无法在 Java 中的线程之间获取更新的列表