我尝试使用recyclerview
库将gridview
的图像集合解析为Picasso
,但我无法使其正常工作
注意:我没有任何错误但没有工作 这里是Json数据a link
我的模块
public class ImagesModule
{
public ArrayList getListTest() {
return listTest;
}
public void setListTest(ArrayList listTest) {
this.listTest = listTest;
}
ArrayList listTest = new ArrayList( );
}
这是适配器`
public class ImageViewAdapter extends RecyclerView.Adapter<ImageViewAdapter.ViewHolder> {
List<ImagesModule> imagesModules;
Context context;
public ImageViewAdapter(List<ImagesModule> imagesModules, Context context){
super();
this.imagesModules = imagesModules;
this.context = context;}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from( parent.getContext() ).inflate( R.layout.imageitem, parent,false );
ViewHolder viewHolder = new ViewHolder( v );
return viewHolder;}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
final ImagesModule imagesModule = imagesModules.get( position );
Picasso.with(context).load(String.valueOf(imagesModule.getListTest())).into(holder.appImage);}
@Override
public int getItemCount() {
return imagesModules.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public android.widget.ImageView appImage;
public ViewHolder(View itemView) {
super( itemView );
appImage = (android.widget.ImageView) itemView.findViewById( R.id.imagegallary);
}}}
这是片段
public class ImageViewFragment extends Fragment {
List<ImagesModule> imagesModules;
List<ImagesModule> imagesModule;
RecyclerView AppRecyclerView;
RecyclerView.Adapter imageRecyclerViewadapter;
String jsonUrl = "https://itunes.apple.com/jo/rss/topfreeapplications/limit=50/json";
RequestQueue requestQueue;
private RecyclerView.LayoutManager mLayoutManager;
public ImageViewFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_image_view, container, false);
}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
AppRecyclerView = (RecyclerView) getView().findViewById(R.id.imageRecyclerView);
imagesModule = new ArrayList<>();
imagesModules = new ArrayList<>();
JsonAppShowData();
}
public void JsonAppShowData() {
final JsonObjectRequest jsonObjectRequest = new JsonObjectRequest( jsonUrl, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
ImagesModule imagesModule = new ImagesModule();
JSONArray jsonArray = response.getJSONObject("feed").getJSONArray("entry");
for (int i = 0; i < jsonArray.length(); i++) {
JSONArray imageArray = response.getJSONObject("feed").getJSONArray("entry").getJSONObject(i).getJSONArray("im:image");
for (int j =0; j < imageArray.length(); j++) {
ArrayList listTest = new ArrayList( );
String image = imageArray.getJSONObject(j).getString("label");
listTest.add(image);
imagesModule.setListTest(listTest);
imagesModules.add(imagesModule);}}
imageRecyclerViewadapter = new ImageViewAdapter(imagesModules,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 :(得分:0)
您无法在单个ImageView
中加载多个图片,因此请尝试将每个图片加载到不同的ImageView
中,因为我观察到每个模块中有固定的3个图像,因此添加3个在xml布局中ImageViews
并单独应用图像。
答案 1 :(得分:0)
您需要List<String> imageUrls
来保存picasso要查看的网址,不需要特殊对象。要解决此问题,请将您的json解析代码更改为
try {
JSONArray entries = response.getJSONObject("feed").getJSONArray("entry");
int count = entries.length();
for (int i = 0; i < count; i++) {
JSONObject imageJson = entries.getJSONObject(i).getJSONObject("im:image");
// in case you want to get image with height 53
String imageUrl = imageJson.getJSONObject("0").getString("label");
// String imageUrl = imageJson.getJSONObject("1").getString("label"); height 75
// String imageUrl = imageJson.getJSONObject("2").getString("label"); height 100
// add urls to the list
imageUrls.add(imageUrl);
}
} catch (JSONException e) {
e.printStackTrace();
}
然后将您的适配器更改为List<String> imageUrls
而不是List<ImagesModule> imagesModule
,并将解析后的列表传递给构造函数。最后在适配器onBindViewHolder()
中将毕加索代码更改为
Picasso.with(context).load(imageUrls.get(position)).into(holder.appImage);
希望有所帮助