我尝试使用 Picasso 通过 uri 从内部存储器加载文件 它总是崩溃,给出错误 java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ImageView Error on the line .load(uri ) 这是我的代码,请帮忙找出错误
import android.net.Uri;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.List;
import it.sephiroth.android.library.picasso.Picasso;
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String LOG_TAG = "my_log";
List<Cover> covers;
RecyclerAdapter(List<Cover> covers) {
this.covers = covers;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView){
super.onAttachedToRecyclerView(recyclerView);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Cover cover = covers.get(position);
String filePath = String.valueOf(cover.getFileBookCover());
Log.d(LOG_TAG, "Cover URI URI: " + filePath);
Uri uri = cover.getFileBookCover();
Picasso
.with(holder.itemView.getContext())
.load(uri)
.into((ImageView) holder.itemView);
}
@Override
public int getItemCount() {
return covers.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
ImageView imgObl;
ViewHolder (View itemView) {
super(itemView);
cardView = itemView.findViewById(R.id.card_view);
imgObl = itemView.findViewById(R.id.iv_recycler_item);
}
}
}
.into((ImageView) holder.itemView);- 这里有错误。你必须写.into(holder.imgObl)你把毕加索扔到支架的根上,他不是
ImageView并且最好在 holder 中创建一个公共方法,并在该方法中将调用
bind()传递uri给 Picasso。对于 onBindViewHolder 方法中的适配器,调用holder.bind(uri)}