Reputation: 2785
been stuck on this small problem for while now.It's simple but confuses me.I have my first activty as a listview downloaded json data using volley,on clicking you go to the details activty,like below
i'm able to send the title to the details activty but cannot resolve on the passingthe image too. Here is my first activty:
public class Movies extends ActionBarActivity{
// Log tag
private static final String TAG = MainActivity.class.getSimpleName();
// Movies json url
private static final String url = "http://api.androidhive.info/json/movies.json";
private ProgressDialog pDialog;
private List<Movie> movieList = new ArrayList<Movie>();
private ListView listView;
private CustomListAdapter adapter;
private static String Title="title";
private static String bitmap="thumbnailUrl";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.event);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Intent newActivity2=new Intent();
setResult(RESULT_OK, newActivity2);
listView = (ListView) findViewById(R.id.list);
adapter = new CustomListAdapter(this, movieList);
listView.setAdapter(adapter);
pDialog = new ProgressDialog(this);
// Showing progress dialog before making http request
pDialog.setMessage("Loading...");
pDialog.show();
// changing action bar color
getActionBar().setBackgroundDrawable(
new ColorDrawable(Color.parseColor("#1b1b1b")));
// Creating volley request obj
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
pDialog.dismiss();
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
movie.setTitle(obj.getString("title"));
movie.setThumbnailUrl(obj.getString("image"));
movie.setRating(((Number) obj.get("rating"))
.doubleValue());
movie.setYear(obj.getInt("releaseYear"));
// Genre is json array
JSONArray genreArry = obj.getJSONArray("genre");
ArrayList<String> genre = new ArrayList<String>();
for (int j = 0; j < genreArry.length(); j++) {
genre.add((String) genreArry.get(j));
}
movie.setGenre(genre);
// adding movie to movies array
movieList.add(movie);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof NoConnectionError){
Toast.makeText(getBaseContext(), "Bummer..There's No Internet connection!", Toast.LENGTH_LONG).show();
}};
});
// Adding request to request queue
ParseApplication.getInstance().addToRequestQueue(movieReq);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = ((TextView) view.findViewById(R.id.title))
.getText().toString();
Intent intent = new Intent(Movies.this, Detail.class);
intent.putExtra(Title, name);
intent.putExtra("images", bitmap);
startActivity(intent);
}
});}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Details activity
public class Detail extends ActionBarActivity{
private static String Title="title";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail);
getSupportActionBar().hide();
Intent i=getIntent();
String name = i.getStringExtra(Title);
TextView lblName = (TextView) findViewById(R.id.name_label);
lblName.setText(name);}
public void onClickHandler(View v){
switch(v.getId()){
case R.id.imageview1:
startActivity(new Intent(this,Movies.class));
}
}}
i'll post more code if needed.I'm a newbie at this stuff so any help will be appreciated.
CustomListAdapter:
public class CustomListAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<Movie> movieItems;
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public CustomListAdapter(Activity activity, List<Movie> movieItems) {
this.activity = activity;
this.movieItems = movieItems;
}
@Override
public int getCount() {
return movieItems.size();
}
@Override
public Object getItem(int location) {
return movieItems.get(location);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
NetworkImageView thumbNail = (NetworkImageView) convertView
.findViewById(R.id.thumbnail);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView rating = (TextView) convertView.findViewById(R.id.rating);
TextView genre = (TextView) convertView.findViewById(R.id.genre);
TextView year = (TextView) convertView.findViewById(R.id.releaseYear);
// getting movie data for the row
Movie m = movieItems.get(position);
// thumbnail image
thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader);
// title
title.setText(m.getTitle());
// rating
rating.setText("Rating: " + String.valueOf(m.getRating()));
// genre
String genreStr = "";
for (String str : m.getGenre()) {
genreStr += str + ", ";
}
genreStr = genreStr.length() > 0 ? genreStr.substring(0,
genreStr.length() - 2) : genreStr;
genre.setText(genreStr);
// release year
year.setText(String.valueOf(m.getYear()));
return convertView;
}
}
Upvotes: 0
Views: 4207
Reputation: 1
First of all enter that code in your fragment activity ...
Intent intent = new Intent(view.getContext(), ItemContents.class);
intent.putExtra("Position", position);
ShopsModel item = (ShopsModel) adapter.getItem(position);
intent.putExtra("logo", item.getThumbnailUrl());
startActivity(intent);
Upvotes: 0
Reputation: 1
Now paste that code in the next activity where you want to show text and image
NetworkImageView img = (NetworkImageView) findViewById(R.id.tv_ic_thumbnail);
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
String bitmap = intent.getStringExtra("logo");
img.setImageUrl(bitmap, imageLoader);
Upvotes: 0
Reputation: 11
I have exactly the same code but I'm using in fragment. Some one tell how to pass a JSON value from fragment to activity. I want Lastest_fragment.java to News_Detail.java (new activity)
Lastest_Fragment.java
public class LatestFragment extends Fragment {
private static final String TAG = LatestFragment.class.getSimpleName();
// Movies json url
private static final String url = "http://api.androidhive.info/json/movies.json";
private ProgressDialog pDialog;
private List<Movie> movieList = new ArrayList<Movie>();
private ListView listView;
private CustomListAdapter adapter;
private static String Title="title";
private static String bitmap="thumbnailUrl";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.latest_layout, container, false);
Intent intent2 = new Intent();
getActivity().setResult(Activity.RESULT_OK, intent2);
// getActivity().finish();
listView = (ListView) v.findViewById(R.id.list);
adapter = new CustomListAdapter(getActivity(), movieList);
listView.setAdapter(adapter);
pDialog = new ProgressDialog(getActivity());
// Showing progress dialog before making http request
pDialog.setMessage("Loading...");
pDialog.show();
// changing action bar color
// getActivity().getActionBar().setBackgroundDrawable( new ColorDrawable(Color.parseColor("#1b1b1b")));
// Creating volley request obj
JsonArrayRequest movieReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
hidePDialog();
// Parsing json
for (int i = 0; i < response.length(); i++) {
try {
JSONObject obj = response.getJSONObject(i);
Movie movie = new Movie();
movie.setTitle(obj.getString("title"));
movie.setThumbnailUrl(obj.getString("image"));
movie.setRating(((Number) obj.get("rating"))
.doubleValue());
movie.setYear(obj.getInt("releaseYear"));
// Genre is json array
JSONArray genreArry = obj.getJSONArray("genre");
ArrayList<String> genre = new ArrayList<String>();
for (int j = 0; j < genreArry.length(); j++) {
genre.add((String) genreArry.get(j));
}
movie.setGenre(genre);
// adding movie to movies array
movieList.add(movie);
} catch (JSONException e) {
e.printStackTrace();
}
}
// notifying list adapter about data changes
// so that it renders the list view with updated data
adapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof NoConnectionError){
Toast.makeText(getActivity().getBaseContext(), "Bummer..There's No Internet connection!", Toast.LENGTH_LONG).show();
}
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(movieReq);
//ParseApplication.getInstance().addToRequestQueue(movieReq);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String name = ((TextView) view.findViewById(R.id.title)).getText().toString();
bitmap = ((Movie)movieList.get(position)).getThumbnailUrl();
Intent intent = new Intent(getActivity(), News_Detail.class);
intent.putExtra(Title, name);
intent.putExtra("images", bitmap);
startActivity(intent);
}
});
return v;
}
News_detail.java
public class News_Detail extends AppCompatActivity {
Intent intent = getIntent();
String name = intent.getStringExtra("name");
private static String Title="title";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.news_detail);
getSupportActionBar().hide();
Intent i = getIntent();
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
String name = i.getStringExtra(Title);
String bitmap = i.getStringExtra("images");
NetworkImageView thumbNail = (NetworkImageView) findViewById(R.id.thumbnail);
thumbNail.setImageUrl(bitmap, imageLoader);
TextView lblname = (TextView) findViewById(R.id.name_label);
lblname.setText(name);
}
public void onClickHandler(View v){
switch(v.getId()){
case R.id.thumbnail:startActivity(new Intent(this,LatestFragment.class));
}
}
}
Upvotes: 0
Reputation: 18112
You need to retrieve the thumbnail url in your details page like this
String bitmap = i.getStringExtra("images"); // Use this in details page
now you can use this bitmap
to load the image in you details page.
EDIT
Use this in onItemClick()
in Movies
class
bitmap = ((Movie)movieList.get(position)).getThumbnailUrl();
Intent intent = new Intent(Movies.this, Detail.class);
intent.putExtra(Title, name);
intent.putExtra("images", bitmap);
Add this in your Detail
activity onCreate()
ImageLoader imageLoader = AppController.getInstance().getImageLoader();
String bitmap = i.getStringExtra("images");
thumbNail.setImageUrl(bitmap, imageLoader);
Upvotes: 1
Reputation: 1543
You are not retreiving the bitmap in Details Activity:
Bitmap bitmap = (Bitmap) i.getParcelableExtra("images");
And then do whatever your need with that bitmap
Upvotes: 1