2016-11-26 98 views
0

我有一个recyclerview显示从JSON文件的项目上线,recyclerview也有在各列表项的缩略图。我如何通过图像从一个网络到另一个活动recyclerview

当我点击一个项目,它开始了新的活动,我该如何通过缩略图从服务器到新的活动牵强?

这是我的新的活动代码:

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。

回答

1

MyHolder类:

class MyHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
    String imageUrl; 
    // ..... 

    @Override 
    public void onClick(View v) { 
     // ... 
     intent.putExtra("ItemImage", imageUrl); 
     context.startActivity(intent); 
    } 
} 

适配器onBindViewHolder:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

    // ... 
    myHolder.imageUrl = current.itemImage; 

} 

ItemModal类:

public class ItemModal extends AppCompatActivity { 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_item_modal); 
     // ... 
     ImageView ItemImageV = (ImageView) findViewById(R.id.imageView); 
     String itemImage = getIntent().getStringExtra("ItemImage"); 
     Glide.with(this).load(itemImage) 
       .placeholder(R.drawable.ic_img_error) 
       .error(R.drawable.ic_img_error) 
       .into(ItemImageV); 

    } 
} 
+0

我如何让它从缓存中,而不是网络负载? – theOzmic

+0

我觉得Glide已经这样做了。运行连接到android studio的应用程序,然后查看Android监视器下的网络图。打开活动时不会降低任何新功能 –

2

改变观点持有者的点击功能你喜欢波纹管

@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); 
     } 

您可以再次使用滑行itemMod.class活动 加载图像在滑翔你可以定义羯羊它可以从缓存中加载或从网络重新加载 如果你从缓存中设置它不会使用网络下载的图像会重用被下载了recyclerview图像

+0

如何选择网络缓存? – theOzmic

+0

使用'current.itemImage'将无法正常工作 – theOzmic

+0

它应该工作,因为你使用的是相同的,而在onBindViewHolder –