我有这个JSON link并且我解析了它。
但是当我点击任何项目时,我会得到所有图像。
我想要的是,当用户点击某个项目时,我想查看仅点击该项目的详细信息。 例如,当我点击imo时,我只需要imo的图像。
我该如何解决这个问题?
这是我的模块:
public class AppShowModule {
private List<String> Allimage = new ArrayList<String>();
public List<String> getAllimage() {
return Allimage;
}
public void setAllimage(List<String> allimage) {
Allimage = allimage;
}
}
这是我的片段
public class ImageListFragment extends Fragment {
List<AppShowModule> appShowModules;
List<AppShowModule> imagesModule;
RecyclerView AppRecyclerView;
RecyclerView.Adapter imageRecyclerViewadapter;
List<String> imageUrls;
String feedKey = "feed";
String entryKey = "entry";
String imageKey = "im:image";
String labelKey = "label";
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(feedKey).getJSONArray( entryKey );
AppShowModule appShowModule = new AppShowModule();
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() );
}
} );
requestQueue = Volley.newRequestQueue( getContext() );
requestQueue.add(jsonObjectRequest);
mLayoutManager = new GridLayoutManager( getContext().getApplicationContext(),3);
AppRecyclerView.setLayoutManager(mLayoutManager);
}
}
这是Recycler适配器,
public class ImageListAdapter extends RecyclerView.Adapter<ImageListAdapter.ViewHolder> {
List<AppShowModule> imagesModules;
List<AppShowModule> appShowModules;
List<String> imageUrl;
AppShowModule appShowModule;
String x;
Context context;
private OnItemClickListener callback;
public ImageListAdapter(List<AppShowModule> appShowModules, Context context ,List<String>imageUrls, OnItemClickListener callback){
super();
this.imageUrl =imageUrls;
this.appShowModules = appShowModules;
this.context = context;
this.callback = callback;
}
@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) {
holder.setClickListerner(imageUrl.get(position), callback);
}
public int getItemCount() {
return imageUrl.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public ImageView appImage;
public void setClickListerner(final String item, final OnItemClickListener callback){
parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.onItemClick(item);
}
});
}
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);
}
});}}
public interface OnItemClickListener {
void onItemClick(String item);
}
}
这是具有单击
的图像视图的活动public class ListViewDetailsFragment extends Fragment {
ImageView AppImage;
TextView AppName,AppArtist,AppContentType,AppRights,AppCategory,AppRealseDate,AppSammary;
ImageButton AppLink;
Context context;
public ListViewDetailsFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_list_view_details, container, false);}
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
AppImage = (ImageView) getView().findViewById(R.id.imageView);
AppName = (TextView) getView().findViewById(R.id.textname);
AppArtist = (TextView) getView().findViewById(R.id.textartest);
AppContentType = (TextView) getView().findViewById(R.id.textcontent);
AppRights = (TextView) getView().findViewById(R.id.textrights);
AppCategory = (TextView) getView().findViewById(R.id.textCategory);
AppRealseDate = (TextView) getView().findViewById(R.id.textRelease);
AppSammary = (TextView) getView().findViewById(R.id.textSummary);
AppLink = (ImageButton) getView().findViewById(R.id.imageButton);
String name = getActivity().getIntent().getExtras().getString("App_name");
final String image = getActivity().getIntent().getExtras().getString("App_image");
String artist = getActivity().getIntent().getExtras().getString("App_artist");
String contentType = getActivity().getIntent().getExtras().getString("App_ContentType");
String rights = getActivity().getIntent().getExtras().getString("App_Rights");
String category = getActivity().getIntent().getExtras().getString("App_Category");
String realse = getActivity().getIntent().getExtras().getString("App_ReleaseDate");
final String link = getActivity().getIntent().getExtras().getString("App_link");
String sammary = getActivity().getIntent().getExtras().getString("App_summary");
AppName.setText(name);
AppArtist.setText(artist);
AppContentType.setText(contentType);
AppRights.setText(rights);
AppCategory.setText(category);
AppRealseDate.setText(realse);
AppSammary.setText(sammary);
Picasso.with(context).load(image).into(AppImage);
AppLink.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity().getBaseContext(),
WebView.class);
intent.putExtra("App_link", link);
getActivity().startActivity(intent);}});
AppImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String id = (String) view.getTag();
Intent intent = new Intent(getActivity().getBaseContext(), ImageList.class);
intent.putExtra("id", id);
getActivity().startActivity(intent);
}});}}
这是图片布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:id="@+id/card">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnrLayout"
android:orientation="vertical">
<ImageView
android:layout_margin="4dp"
android:scaleType="centerCrop"
android:id="@+id/appImage"
android:layout_width="100dp"
android:background="@android:color/darker_gray"
android:padding="2dp"
android:layout_height="100dp" />
</LinearLayout>
答案 0 :(得分:0)
创建一个接口类,如:
public interface OnItemClickListener {
void onItemClick(String item);
}
并在 ImageListFragment 中实现此类。
public class ImageListFragment extends Fragment implements OnItemClickListener {
现在,当您在 ImageListFragment 中创建适配器对象时,请更改代码
imageRecyclerViewadapter = new ImageListAdapter(appShowModules,getContext(),imageUrls);
到
imageRecyclerViewadapter = new ImageListAdapter(appShowModules,getContext(),imageUrls, ImageListFragment.this);
并在适配器类中,将构造函数更改为
public ImageListAdapter(List<AppShowModule> appShowModules, Context context ,List<String>imageUrls, OnItemClickListener callback){
super();
this.imageUrl =imageUrls;
this.appShowModules = appShowModules;
this.context = context;
this.callback = callback;
}
在你的适配器中,你必须再写一行,这是
private OnItemClickListener callback;
现在在适配器的 onBindViewHolder 内,写
holder.setClickListerner(imageUrl.get(position), callback);
并在 ViewHolder 类中创建 setClickListerner 方法,如
public void setClickListerner(String item, OnItemClickListener callback){
parent.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
callback.onItemClick(item);
}
});
现在你有像这样的ViewHolder
class ViewHolder extends RecyclerView.ViewHolder {
public ImageView appImage;
public LinearLayout parent;
public void setClickListerner(final String item, final OnItemClickListener callback){
parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.onItemClick(item);
}
});
}
public ViewHolder(View itemView) {
super(itemView);
appImage = (ImageView) itemView.findViewById(R.id.appImage);
parent = (LinearLayout) itemView.findViewById(R.id.lnrLayout);
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);
}
});
}
}
现在,当您点击Fragment类中的任何项目 onItemClick 时,会选择图像。