【问题标题】:RecyclerView not displaying data on cardview properly (Android)?RecyclerView 不能在 cardview 上正确显示数据(Android)?
【发布时间】:2016-10-29 16:29:11
【问题描述】:

我正在制作一个文件管理器,我正在尝试使用 RecyclerView。问题是 recyclerview 没有在 cardview 上正确显示数据。它显示随机数据,有时在不同的卡片视图上显示相同的数据。一些卡片视图是空的,没有显示任何数据。我也没有保存recyclerview的状态。数据随机重复。我在片段中使用recyclerview。有没有办法解决这个问题?我是 android 的新手开发者。

public class FileInternalStorageRecyclerAdapter extends RecyclerView.Adapter<FileInternalStorageRecyclerAdapter.ViewHolder>{
Context context;
ArrayList<InternalStorageModel> fileList;
InternalStorageFragment.InternalStorageListener listener;
public FileInternalStorageRecyclerAdapter(Context context,ArrayList<InternalStorageModel> fileList, InternalStorageFragment.InternalStorageListener listener){
    this.fileList=fileList;
    this.listener=listener;
    this.context=context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    CardView cardView=(CardView) LayoutInflater.from(context).inflate(R.layout.file_internal_storage_recycler_adapter,parent,false);
    return new ViewHolder(cardView);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    final CardView cv=holder.cardView;
    final InternalStorageModel model=fileList.get(position);
    if (model.fileIsDirectory){
        if (model.fileName.startsWith(".")){
            holder.imgLogo.setImageResource(R.drawable.ic_hidden_folder_36dp);
            holder.txtName.setText(model.fileSimpleName+" ("+model.fileCountInDirectory+" )");
            return;
        }
        holder.imgLogo.setImageResource(R.drawable.ic_folder_36dp);
        holder.txtName.setText(model.fileSimpleName+" ("+model.fileCountInDirectory+" )");

    }else if (model.fileIsFile){
        if (model.fileName.startsWith(".")){
            holder.imgLogo.setImageResource(R.drawable.ic_hidden_file_36dp);
            holder.txtName.setText(model.fileSimpleName);
            return;
        }
        holder.imgLogo.setImageResource(R.drawable.ic_file_36dp);
        holder.txtName.setText(model.fileSimpleName);

    }
    cv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try{
                if (model.fileIsDirectory){
                    listener.navigationThroughFragment(model.fileAbsolutePath);

                }else if (model.fileIsFile){
                    Intent intent=new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(Uri.fromFile(model.fileAbsoluteFile),"*/*");
                    context.startActivity(Intent.createChooser(intent,"Complete action using..."));
                }
            }catch(Exception e){
                e.printStackTrace();
            }
        }
    });

}

@Override
public int getItemCount() {
    return fileList.size();
}

class ViewHolder extends RecyclerView.ViewHolder{
    private ImageView imgLogo;
    private TextView txtName;
    private CardView cardView;
    private ViewHolder(CardView itemView) {
        super(itemView);
        cardView=itemView;
        imgLogo=(ImageView)itemView.findViewById(R.id.imgLogo);
        txtName=(TextView)itemView.findViewById(R.id.txtName);
    }
}

}

【问题讨论】:

  • 可能你的适配器实现是错误的。请发布适配器类,否则我们无能为力。

标签: java android file-manager


【解决方案1】:

我认为必须存在模型项不是文件而不是目录(符号链接?)的情况,这就是您遇到麻烦的地方。

适配器必须为每个 getView() 调用重新绑定数据,否则您将看到不相关的先前数据。尝试在模型不是文件而不是目录的情况下添加另一个 else 块。

    // your code as it was
    // ...
} else if (model.fileIsFile) {
    // ...
    // your code as it was
    // ...
} else {
    holder.imgLogo.setImageResource(R.drawable.something);
    holder.txtName.setText(model.fileSimpleName);
}

【讨论】:

  • 是的,它在空卡片视图中显示数据。非常感谢你。也许我的数组列表没有正确获取数据。如果我在 File 类中将文件路径设置为 Environment.getExternalStorageDirectory.getAbsolutePath。什么将是空的cardviews 显示。它必须是文件或文件夹。任何线索!
  • 知道了,我的布尔值出错了,这就是为什么它在卡片视图中没有显示任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
相关资源
最近更新 更多