2016-09-15 39 views
0

你好我有此JSON数据a link我如何知道从recyclerview中选择的任何图像?

和我解析jsonArray成

这是一块JSON的,

"im:image":[ 
      { 
       "label":"http://is1.mzstatic.com/image/thumb/Purple20/v4/87/35/82/87358231-ce91-3d14-b306-95888c23db3c/mzl.gdgtivnk.png/53x53bb-85.png", 
       "attributes":{ 
       "height":"53" 
       } 
      }, 
      { 
       "label":"http://is5.mzstatic.com/image/thumb/Purple20/v4/87/35/82/87358231-ce91-3d14-b306-95888c23db3c/mzl.gdgtivnk.png/75x75bb-85.png", 
       "attributes":{ 
       "height":"75" 
       } 
      }, 
      { 
       "label":"http://is3.mzstatic.com/image/thumb/Purple20/v4/87/35/82/87358231-ce91-3d14-b306-95888c23db3c/mzl.gdgtivnk.png/100x100bb-85.png", 
       "attributes":{ 
       "height":"100" 
       } 
      } 

我收杆它像这样照片 enter image description here

但是当我点击这里的任何图像,我只是这个形象!

enter image description here

我怎么能解决这个问题,当我点击进入“snapchat”我得到了捕捉图像?

这个方法解析JSON

public void JsonAppShowData() { 
    final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(jsonUrl, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { try { 
      JSONArray jsonArray = response.getJSONObject(feedKey).getJSONArray(entryKey); 
      AppShowModule appShowModule = new AppShowModule(); 
      int x = appShowModule.getId(); 
      for (int i = 0; i<jsonArray.length();i++) 
      { 
       JSONArray imageArray = response.getJSONObject(feedKey).getJSONArray(entryKey).getJSONObject(i).getJSONArray(imageKey); 
       for (int j = 0; j < imageArray.length(); j++) { 
        String image = imageArray.getJSONObject(j).getString(labelKey).toString(); 
        imageUrls.add(image); 
        appShowModule.setAllimage(imageUrls); 
        appShowModules.add(appShowModule); 
       }} 
       imageRecyclerViewadapter = new ImageListAdapter(appShowModules, getContext(), imageUrls); 
       AppRecyclerView.setAdapter(imageRecyclerViewadapter); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      }} 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("LOG", error.toString()); 
     } 
    }); 

这是图像列表加载

public class ImageListAdapter extends RecyclerView.Adapter<ImageListAdapter.ViewHolder> { 
    List<AppShowModule> appShowModules; 
    List<String> imageUrl; 
    AppShowModule appShowModule; 
    String x; 
    Context context; 
    public ImageListAdapter(List<AppShowModule> appShowModules, Context context ,List<String>imageUrls 
    ){ 
     super(); 
     this.imageUrl =imageUrls; 
     this.appShowModules = appShowModules; 
     this.context = context;} 
    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.imagelayout, parent,false); 
     ViewHolder viewHolder = new ViewHolder(v); 
     return viewHolder;} 
    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     AppShowModule appShowModule = appShowModules.get(position); 
     x = appShowModule.getAllimage().get(position); 
     Picasso.with(context).load(x).into(holder.appImage); 
    } 
    public int getItemCount() { 
     return imageUrl.size(); 
    } 
    class ViewHolder extends RecyclerView.ViewHolder { 
     public ImageView appImage; 
     public ViewHolder(View itemView) { 
      super(itemView); 
      appImage = (ImageView) itemView.findViewById(R.id.appImage); 
      appImage.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Intent intent= new Intent(context, ImageShow.class); 
        intent.putExtra("image", x); 
        context.startActivity(intent); 
       }}); 
     } 

     } 
} 

,这是点击

appImage=(ImageView)findViewById(R.id.appImage); 
    Picasso.with(context).load(x).into(appImage); 

回答

0

当您直接不能将显示活动在ViewHolder中使用变量'x',因为它不会点击项目点击的图像链接编辑。

要获得正确的链接,您必须使用getAdapterPosition()。如果点击响应取决于所点击项目的位置,则只需在ViewHolder中调用getAdapterPosition()即可。 Beow我已经展示了如何在ViewHolder中使用它。

public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnItemClickListener { 
public MyViewHolder(View view) { 
    super(view); 

    view.setOnClickListener(this); 
} 

@Override 
public void OnClick(View view) { 
    // Get the item clicked 
    // For this example, I'm assuming your data source is of type `List<MyObject>` 
    MyObject myObject = mDataSource.get(getAdapterPosition()); 
    // Then you can do any actions on it, for example - 
    myObject.setChecked(); 
    } 
} 
+0

这个代码是为onBindViewHolder 和我尝试添加getAdapterPosition());给视图持有者其connot reslove! –

0

你可以在你的适配器定义一个回调的项目点击

public interface OnItemClickListener { 
    void onItemClicked(YourItem item); 
} 

暴露的方法在适配器主叫片段或活动设置监听

public void setOnItemClickListener(OnItemClickListener onItemClickListener) { 
    this.onItemClickListener = onItemClickListener; 
} 

虽然绑定您的观看者,您可以将事件报告回片段或活动&执行业务逻辑

@Override 
     public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
     //your binding code 
     if (onItemClickListener != null) { 
      onItemClickListener.onItemClicked(item); 
     } 
    } 

在你的片段或活动

adapter.setOnItemClickListener(new YourAdapter.OnItemClickListener() { 
      @Override 
      public void onItemClicked(YourItem item) { 
       //Business logic goes here 
      } 
     }); 
+0

感谢您的回答,但您对此有何意见? void onItemClicked(YourItem item); 您的项目?? –

+0

在你的情况下AppShowModule是“YourItem”到适配器 – Krunal

+0

ok现在,this.onItemClickListener,onItemClickListener无法解决! –

相关问题