2016-09-10 8 views
0

ich habe diese Json DataJsonArray zu Picasso Bibliothek Parsen

und i Prasing die Daten in dieser json dies ,,

enter image description here

jetzt möchte ich, wenn Benutzer klicken Sie auf das Bild von der Anwendung öffne ein anderes activty, das eine recyceler Ansicht hat und die Bilder im "im: image" json Feld im json! anzeigt! Dieser Code gibt mir alle Bilder, aber ich werde nicht nur das Bild, das ist mir eine Idee geklickt ??

das ist mein Modul

public class AppShowModule{ 

private List<String> Allimage = new ArrayList<String>(); 
public List<String> getAllimage() { 
    return Allimage;} 
public void setAllimage(List<String> allimage) { 
    Allimage = allimage;} 

der Recycler Ansicht Adapter

public class ImageListAdapter extends RecyclerView.Adapter<ImageListAdapter.ViewHolder> { 
List<AppShowModule> appShowModules; 
List<AppShowModule> imageUrls ; 

Context context; 
public ImageListAdapter(List<AppShowModule> appShowModules, Context context){ 
    super(); 
    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) { 
    final AppShowModule appShowModule = appShowModules.get(position); 
    Picasso.with(context).load(appShowModule.getAllimage().get(position)).into(holder.appImage); 

} 
@Override 
public int getItemCount() { 
    return appShowModules.size(); 
} 
class ViewHolder extends RecyclerView.ViewHolder { 
    public ImageView appImage; 
    public ViewHolder(View itemView) { 
     super(itemView); 
     appImage = (ImageView) itemView.findViewById(R.id.appImage); 
    }}} 

und das ist das Fragment

public class ImageListFragment extends Fragment { 

List<AppShowModule> appShowModules; 
Context context; 
List<AppShowModule> imagesModule; 
RecyclerView AppRecyclerView; 
ImageView Imageview; 
RecyclerView.Adapter imageRecyclerViewadapter; 
List<String> imageUrls; 
String feedKey = "feed"; 
String entryKey = "entry"; 
String nameKey = "im:name"; 
String imageKey = "im:image"; 
String labelKey = "label"; 
String artistKey = "im:artist"; 
String contentTypeKey = "im:contentType"; 
String attribueKey = "attributes"; 
String rightsKey = "rights"; 
String categoryKey = "category"; 
String relaseDateKey = "im:releaseDate"; 
String linkKey = "link"; 
String hrefKey = "href"; 
String summaryKey = "summary"; 
String jsonUrl = "https://itunes.apple.com/jo/rss/topfreeapplications/limit=50/json"; 
RequestQueue requestQueue; 
private RecyclerView.LayoutManager mLayoutManager; 
public ImageListFragment() { 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_image_list, container, false); 
} 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    AppRecyclerView = (RecyclerView) getView().findViewById(R.id.imageRecyclerView); 
    imagesModule = new ArrayList<>(); 
    appShowModules = new ArrayList<>(); 
    imageUrls = new ArrayList<>(); 
    JsonAppShowData(); 
} 
public void JsonAppShowData() { 
    final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(jsonUrl, new Response.Listener<JSONObject>() { 
     @Override 
     public void onResponse(JSONObject response) { 
      try { 

       JSONArray jsonArray = response.getJSONObject("feed").getJSONArray("entry"); 
       AppShowModule appShowModule = new AppShowModule(); 
       for (int i = 0; i < jsonArray.length(); i++) { 

        String image = response.getJSONObject(feedKey).getJSONArray(entryKey).getJSONObject(i).getJSONArray(imageKey).getJSONObject(0).getString(labelKey).toString(); 
        imageUrls.add(image); 
        appShowModule.setAllimage(imageUrls); 
        appShowModules.add(appShowModule); 
       } 
       imageRecyclerViewadapter = new ImageListAdapter(appShowModules,getContext()); 
       AppRecyclerView.setAdapter(imageRecyclerViewadapter); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      }} 

    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("LOG", error.toString()); 
     } 
    }); 
    requestQueue = Volley.newRequestQueue(getContext()); 
    requestQueue.add(jsonObjectRequest); 
    mLayoutManager = new GridLayoutManager(getContext().getApplicationContext(),3); 
    AppRecyclerView.setLayoutManager(mLayoutManager); }} 
+0

Gib mir etwas Zeit. Ich werde dir antworten – Nikhil

+0

ok iam warte dich –

Antwort

0

Hier können Sie von jedem Array erste Bild werden das Abrufen von folgenden Aktionen ausführen

.... getJSONArray (entryKey) .getJSONObject (i) .getJSONArray (ImageKey) .getJSONObject (0) ...

während Sie ausgewählte Bild alle Bilder holen müssen aus dem Array im Zusammenhang Iterieren Sie also Ihr Array auf dem inneren Bildfeld im:image, nicht auf dem äußeren Hauptfeld entry. Befolgen Sie diese Schritte

  1. Immer wenn Sie auf das Bildelement klicken, erhalten Sie die ID dieses Elements.
  2. iterieren Sie auf dem äußeren Array entry und überprüfen Sie, ob die angeklickte Artikel-ID im Array entry übereinstimmt.
  3. wenn es ID übereinstimmt, dann Iterate auf inneren Array im:immage und speichern Sie diese Bilder in Ihrer Liste. Und wenden Sie diese Liste auf Ihre recyclerview.

Hoffe, das hilft.

+0

danke für die antwort mich, aber wie kann ich chek, wenn das angeklickte item übereinstimmt? –

+0

müssen Sie die ID des angeklickten Elements als Tag für Ihre 'imageview' als' imageview.setTag ("imageview id"); 'und dann Wenn Sie auf diese Imageview klicken, können Sie diese ID in' onClick() 'als' String id = (String) v.getTag(); ' – Nikhil

+0

Sie meinen, ich muss dies zur vorherigen Aktivität hinzufügen! denn hier habe ich keinen onclick! –