Java 本地存储的图像不会显示在RecyclerView内的CardView中
我有一个Java 本地存储的图像不会显示在RecyclerView内的CardView中,java,android,android-recyclerview,android-cardview,Java,Android,Android Recyclerview,Android Cardview,我有一个RecyclerView,它的列表项是cardwiew。cardwiew只有两个TextView和一个ImageView <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="70dp" android:la
RecyclerView
,它的列表项是cardwiew
。cardwiew
只有两个TextView
和一个ImageView
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:id="@+id/dcCardView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@drawable/detail_coast_cardview_bg">
<ImageView
android:id="@+id/dcImage"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="8dp"
android:src="@drawable/radiation"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/dcName"
android:textColor="#fff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="212"
android:textSize="18dp" />
<TextView
android:textColor="#fff"
android:id="@+id/dcValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="renu asdasasd"
android:textSize="18dp" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
以及我的CoastDetailsActivity2
public class CoastDetailsActivity2 extends AppCompatActivity {
private Context context;
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor editor;
private int coastId;
private String jsonCoastDetailsString = "";
private RecyclerView recyclerView;
private DetailedCoastAdapter detailedCoastAdapter;
private ImageView btnBlueFlag;
private ImageView btnHandycapFriendly;
private ImageView btnFavorite;
private ImageView btnWaze;
private LinearLayout mainLayout;
private Beach mBeach;
private TextView tvBeachName;
private DetailedCoastWithForcast detailedCoastWithForcast;
private DetailedBeachMetadata detailedBeachMetadata;
private DetailedBeachHourlyForecast dbhfToday;
private List<DetailedCoastRecyclerView> detailedCoastRecyclerViewList = new ArrayList<>();
private Map<String, String> windBearing = new HashMap<>();
private Map<String, String> jellyType = new HashMap<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_coast_details2);
setPointer();
}
private void setPointer() {
this.context = this;
mainLayout = (LinearLayout) findViewById(R.id.mainLayout);
sharedPreferences = context.getSharedPreferences(sharedPreferencesName, MODE_PRIVATE);
editor = sharedPreferences.edit();
tvBeachName = (TextView) findViewById(R.id.tvBeachName);
//start the forecast activity
tvBeachName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ForecastActivity.class);
intent.putExtra("coastId", coastId);
startActivity(intent);
}
});
AndroidNetworking.initialize(context);
//get the coastId
Bundle extras = getIntent().getExtras();
if (extras == null) {
//TODO add snackbar for error
} else {
coastId = extras.getInt("coastId");
}
getBeachDetails();
recyclerView = (RecyclerView) findViewById(R.id.dcRecyclerView);
detailedCoastAdapter = new DetailedCoastAdapter(detailedCoastRecyclerViewList, context);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(detailedCoastAdapter);
}
}
公共类CoastDetailsActivity2扩展了AppCompativeActivity{
私人语境;
私人共享引用共享引用;
私有共享参考。编辑器;
私人国际海岸ID;
私有字符串JSONCastDetailsString=“”;
私人回收站;
私有详细CoastAdapter详细CoastAdapter;
私有ImageView btnBlueFlag;
私有图像查看btnHandycapFriendly;
私人ImageView btnFavorite;
私有ImageView btnWaze;
私人线路布局主要布局;
私人泳滩;;
私有文本视图tvBeachName;
私人详细海岸带预测详细海岸带预测;
私有DetailedBeachMetadata DetailedBeachMetadata;
今日DBHF预测的私人详细海滩小时数;
private List DetailedCoastRecycleServiceWList=新建ArrayList();
private Map windBearing=新HashMap();
私有映射类型=新HashMap();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u coast\u details2);
setPointer();
}
私有void setPointer(){
this.context=this;
mainLayout=(LinearLayout)findViewById(R.id.mainLayout);
SharedReferences=context.getSharedReferences(SharedReferencesName,MODE_PRIVATE);
editor=SharedReferences.edit();
tvBeachName=(TextView)findViewById(R.id.tvBeachName);
//启动预测活动
tvBeachName.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(上下文,ForecasActivity.class);
意向。额外(“coastId”,coastId);
星触觉(意向);
}
});
初始化(上下文);
//获取海岸ID
Bundle extras=getIntent().getExtras();
如果(附加==null){
//TODO为错误添加snackbar
}否则{
coastId=额外的getInt(“coastId”);
}
getBeachDetails();
recyclerView=(recyclerView)findViewById(R.id.dcRecyclerView);
detailedCoastAdapter=新的detailedCoastAdapter(DetailedCoastRecycleServiceWirList,上下文);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(上下文,LinearLayoutManager.VERTICAL,false);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(detailedCoastAdapter);
}
}
适配器呢
public class ForecastAdapter extends RecyclerView.Adapter<ForecastAdapter.myViewHolder> {
Context context;
private List<DetailedCoastRecyclerView> dbhf0;
public ForecastAdapter(Context context, List<DetailedCoastRecyclerView> dbhf0) {
this.context = context;
this.dbhf0 = dbhf0;
}
@Override
public myViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.detailed_coast_card, parent, false);
return new myViewHolder(view);
}
@Override
public void onBindViewHolder(myViewHolder holder, int position) {
DetailedCoastRecyclerView dcrv = dbhf0.get(position);
holder.tvName.setText(dcrv.getName());
holder.tvValue.setText(dcrv.getValue());
//holder.ivImage.setImageResource(dcrv.getImageName());
Glide.with(context).load(dcrv.getImageName()).into(holder.ivImage);
}
@Override
public int getItemCount() {
return dbhf0.size();
}
public class myViewHolder extends RecyclerView.ViewHolder {
ImageView ivImage;
TextView tvName;
TextView tvValue;
public myViewHolder(View itemView) {
super(itemView);
ivImage = (ImageView) itemView.findViewById(R.id.dcImage);
tvName = (TextView) itemView.findViewById(R.id.dcName);
tvValue = (TextView) itemView.findViewById(R.id.dcValue);
}
}
}
公共类ForecasAdapter扩展了RecyclerView.Adapter{
语境;
私有列表dbhf0;
公共ForecasAdapter(上下文,列表dbhf0){
this.context=上下文;
this.dbhf0=dbhf0;
}
@凌驾
公共myViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=布局更平坦。从(上下文)。充气(R.layout.detailed\u coast\u card,父级,false);
返回新的myViewHolder(视图);
}
@凌驾
公共无效onBindViewHolder(myViewHolder,int位置){
DetailedCoastRecyclerViewDCRV=dbhf0.get(位置);
holder.tvName.setText(dcrv.getName());
holder.tvValue.setText(dcrv.getValue());
//holder.ivImage.setImageResource(dcrv.getImageName());
将(dcrv.getImageName())加载到(holder.ivImage)中;
}
@凌驾
public int getItemCount(){
返回dbhf0.size();
}
公共类myViewHolder扩展了RecyclerView.ViewHolder{
图像视图;
文本视图tvName;
文本视图值;
公共myViewHolder(查看项目视图){
超级(项目视图);
ivImage=(ImageView)itemView.findviewbyd(R.id.dcImage);
tvName=(TextView)itemView.findViewById(R.id.dcName);
tvValue=(TextView)itemView.findViewById(R.id.dcValue);
}
}
}
当我运行它时,getBeachDetails()
方法从服务器获取所有信息,将其添加到ArrayList
并在适配器上调用notifyDataSetChanged()
我知道它的工作原理,因为我看到了每张卡的名称和值,但本地存储的图像不会显示
我在一个ViewPager
中使用了相同的适配器,有3个片段,一切正常
有什么想法吗?我想你的图像分辨率太高了,android buffer无法处理,在渲染图像时引发异常,所以我知道你在
ImageView
上加载图像时必须降低图像质量
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="2dp"
android:id="@+id/dcCardView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@drawable/detail_coast_cardview_bg">
<ImageView
android:id="@+id/dcImage"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="8dp"
android:src="@drawable/radiation"
android:layout_gravity="center_vertical" />
<LinearLayout
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/dcName"
android:textColor="#fff"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="212"
android:textSize="18dp" />
<TextView
android:textColor="#fff"
android:id="@+id/dcValue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="renu asdasasd"
android:textSize="18dp" />
</LinearLayout>
</LinearLayout>
</android.support.v7.widget.CardView>
在毕加索,这是通过调用resize(width,height)
方法来实现的
Picasso.with(context)
.load(res)
.resize(width,height)
.placeholder(placeHolder)
.into(view);
我想这和Glide是一样的
您使用的是DetailedCoastAdapter,但是提供了ForecastAdapter的代码“在带有3个片段的ViewPager中使用相同的适配器”是什么意思?你的碎片上有回收器吗?您是否使用相同的DetailedCoast对象,并且dcrv.getImageName()是否是有效的url/资源名称?没有注意到,在DetailedCoast适配器中没有定义imageView。谢谢,不客气。如果我的回答对你有帮助,你可以接受,并随时向我保证任何细节