我有一个recyclelerview在线显示json文件中的项目,recyclelerview在每个列表项中也有一个缩略图。
当我点击某个项目时,它会启动一项新活动,如何将从服务器获取的缩略图图像传递给新活动?
这是我的新活动代码:
public class ItemModal extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_item_modal);
TextView ItemNameV = (TextView) findViewById(R.id.textView);
TextView ItemDescV = (TextView) findViewById(R.id.textView2);
TextView ItemPriceV = (TextView) findViewById(R.id.textView3);
ImageView ItemImageV = (ImageView) findViewById(R.id.imageView);
String itemName = getIntent().getStringExtra("ItemName");
String itemDesc = getIntent().getStringExtra("ItemDesc");
String itemPrice = getIntent().getStringExtra("ItemPrice");
String itemImage = getIntent().getStringExtra("ItemImage");
ItemNameV.setText(itemName);
ItemDescV.setText(itemDesc);
ItemPriceV.setText(itemPrice);
ItemImageV.setId(Integer.parseInt(itemImage));
}
}
以下是适配器代码:
public class AdapterItems extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private LayoutInflater inflater;
List<DataItems> data= Collections.emptyList();
DataItems current;
int currentPos=0;
// create constructor to innitilize context and data sent from MainActivity
public AdapterItems(Context context, List<DataItems> data){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
}
// Inflate the layout when viewholder created
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.container_items, parent,false);
MyHolder holder=new MyHolder(view);
return holder;
}
// Bind data
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// Get current position of item in recyclerview to bind data and assign values from list
MyHolder myHolder= (MyHolder) holder;
DataItems current=data.get(position);
myHolder.textItemName.setText(current.itemName);
myHolder.textDesc.setText(current.itemDesc);
myHolder.textPrice.setText("# " + current.price);
myHolder.textPrice.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));
// load image into imageview using glide
Glide.with(context).load(current.itemImage)
.placeholder(R.drawable.ic_img_error)
.error(R.drawable.ic_img_error)
.into(myHolder.ivItem);
}
// return total item from List
@Override
public int getItemCount() {
return data.size();
}
class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView textItemName;
ImageView ivItem;
TextView textDesc;
TextView textPrice;
// create constructor to get widget reference
public MyHolder(View itemView) {
super(itemView);
textItemName = (TextView) itemView.findViewById(R.id.textItemName);
ivItem = (ImageView) itemView.findViewById(R.id.ivItem);
textDesc = (TextView) itemView.findViewById(R.id.textDesc);
textPrice = (TextView) itemView.findViewById(R.id.textPrice);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ItemModal.class);
intent.putExtra("ItemName", textItemName.getText().toString());
intent.putExtra("ItemImage", ivItem.getId());
intent.putExtra("ItemDesc", textDesc.getText().toString());
intent.putExtra("ItemPrice", textPrice.getText().toString());
Toast.makeText(context, textDesc.getText().toString() , Toast.LENGTH_SHORT ).show();
context.startActivity(intent);
}
}
}
以下是开始新活动的代码:
public void onClick(View v) {
Intent intent = new Intent(context, ItemModal.class);
intent.putExtra("ItemName", textItemName.getText().toString());
intent.putExtra("ItemImage", ivItem.getId());
intent.putExtra("ItemDesc", textDesc.getText().toString());
intent.putExtra("ItemPrice", textPrice.getText().toString());
Toast.makeText(context, textDesc.getText().toString() , Toast.LENGTH_SHORT ).show();
context.startActivity(intent);
}
这里我只是传递了没有帮助的图像的ID。
答案 0 :(得分:1)
MyHolder课程:
isset
适配器onBindViewHolder:
class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
String imageUrl;
// .....
@Override
public void onClick(View v) {
// ...
intent.putExtra("ItemImage", imageUrl);
context.startActivity(intent);
}
}
ItemModal类:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
// ...
myHolder.imageUrl = current.itemImage;
}
答案 1 :(得分:1)
将视图持有者的点击功能更改为类似于下面的
@Override
public void onClick(View v) {
DataItems current=data.get(getAdapterPosition());
//getAdapterPosition() will return the clicked position
Intent intent = new Intent(context, ItemModal.class);
intent.putExtra("ItemName", current.itemName);
intent.putExtra("ItemImage", current.itemImage);
intent.putExtra("ItemDesc", current.itemDesc);
intent.putExtra("ItemPrice", "# " + current.price);
Toast.makeText(context, textDesc.getText().toString() , Toast.LENGTH_SHORT ).show();
context.startActivity(intent);
}
再次,您可以使用Glide在itemMod.class活动中加载图像 在Glide中,您可以定义它可以从缓存加载还是再次从网络重新加载 如果您从缓存设置它不会使用网络下载图像,它将重用下载的文件,以回收Recyclerview