I have a Recyclerview
with Cardview
s that show an image and a short description that is obtained through a JSON
(with volley
), what I want is that, when I click on an item from the recycler all the information is opened together with the image but I do not know how, I do not know if to use an activity or a fragment and obviously each item must open its respective description
MainActivity
public class MainActivity extends AppCompatActivity {
private Toolbar mToolbar;
RequestQueue queue;
String url = "http://urljson";
RecyclerView recyclerView;
List<NewsFeed> feedsList = new ArrayList<NewsFeed>();
MyRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//initialize toolbar
mToolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
//Initialize RecyclerView
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
adapter = new MyRecyclerAdapter(this, feedsList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
//Scroll-hide
recyclerView.setOnScrollListener(new MyScrollListener(this) {
@Override
public void onMoved(int distance) {
mToolbar.setTranslationY(-distance);
}
//Scroll-hide
});
//Getting Instance of Volley Request Queue
queue = NetworkController.getInstance(this).getRequestQueue();
//Volley's inbuilt class to make Json array request
JsonArrayRequest newsReq = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
NewsFeed feeds = new NewsFeed(obj.getString("title"), obj.getString("content"), obj.getString("image"));
// adding movie to movies array
feedsList.add(feeds);
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
//Notify adapter about data changes
adapter.notifyItemChanged(i);
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
System.out.println(error.getMessage());
}
});
//Adding JsonArrayRequest to Request Queue
queue.add(newsReq);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
AdapterRecycler
public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
private List<NewsFeed> feedsList;
private Context context;
private LayoutInflater inflater;
public MyRecyclerAdapter(Context context, List<NewsFeed> feedsList) {
this.context = context;
this.feedsList = feedsList;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = inflater.inflate(R.layout.singleitem_recyclerview, parent, false);
return new MyViewHolder(rootView);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
NewsFeed feeds = feedsList.get(position);
//Pass the values of feeds object to Views
holder.title.setText(feeds.getFeedName());
holder.content.setText(feeds.getContent());
holder.imageview.setImageUrl(feeds.getImgURL(), NetworkController.getInstance(context).getImageLoader());
}
@Override
public int getItemCount() {
return feedsList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private TextView content, title;
private NetworkImageView imageview;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.title_view);
content = (TextView) itemView.findViewById(R.id.content_view);
// Volley's NetworkImageView which will load Image from URL
imageview = (NetworkImageView) itemView.findViewById(R.id.thumbnail);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "msg msg", Toast.LENGTH_SHORT).show();
}
});
}
}
}