簡體   English   中英

RecyclerView無法在Cardview上正確顯示數據(Android)?

[英]RecyclerView not displaying data on cardview properly (Android)?

我正在制作文件管理器,並且嘗試使用RecyclerView。 問題是recyclerview無法在cardview上正確顯示數據。 它會顯示隨機數據,有時還會在不同的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);
    }
}

}

我認為在某些情況下,如果模型項不是文件也不是目錄(符號鏈接?),那就麻煩了。

適配器必須為每個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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM