i’m playing around with a piece of code i found on the web and i’m trying to add a click listener to the listview and get the position of the item. however the position is always empty for some reason. here is my code:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.v("position", position); //POSITION IS ALWAYS EMPTY
Intent i = new Intent(Example.this, ShowReleases.class);
i.putExtra("id", position);
startActivityForResult(i, ACTIVITY_CREATE);
}
});
i have also added the complete code just in case:
package com.example;
import java.util.ArrayList;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
public class Example extends Activity {
private static final int ACTIVITY_CREATE = 0;
public Bitmap placeholder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList<Tweet> tweets = getTweets("android", 1);
ListView listView = (ListView) findViewById(R.id.ListViewId);
listView.setAdapter(new TweetItemAdapter(this, R.layout.listitem, tweets));
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.v("position", position); //POSITION IS ALWAYS EMPTY
Intent i = new Intent(Example.this, ShowReleases.class);
i.putExtra("id", position);
startActivityForResult(i, ACTIVITY_CREATE);
}
});
}
public ArrayList<Tweet> getTweets(String searchTerm, int page) {
String searchUrl = "http://search.twitter.com/search.json?q=@" + searchTerm;
Log.v("searchUrl", searchUrl);
ArrayList<Tweet> tweets = new ArrayList<Tweet>();
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(searchUrl);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = null;
try{
responseBody = client.execute(get, responseHandler);
}catch(Exception ex) {
ex.printStackTrace();
}
JSONObject jsonObject = null;
JSONParser parser=new JSONParser();
try {
Object obj = parser.parse(responseBody);
jsonObject=(JSONObject)obj;
}catch(Exception ex){
Log.v("TEST","Exception1: " + ex.getMessage());
}
JSONArray arr = null;
try {
Object j = jsonObject.get("results");
arr = (JSONArray)j;
}catch(Exception ex){
Toast.makeText(this, "JSON Error", Toast.LENGTH_LONG);
Log.v("TEST","Exception2: " + ex.getMessage());
}
for(Object t : arr) {
Tweet tweet = new Tweet(
((JSONObject)t).get("from_user").toString(),
((JSONObject)t).get("text").toString(),
((JSONObject)t).get("profile_image_url").toString(),
((JSONObject)t).get("id").toString()
);
tweets.add(tweet);
}
return tweets;
}
/** Classes **/
public class Tweet {
public String username;
public String message;
public String image_url;
public String post_id;
public Boolean usernameSet = false;
public Boolean messageSet = false;
public Boolean imageSet = false;
public Bitmap avatar;
public Tweet(String username, String message, String url, String post_id) {
this.username = username;
this.message = message;
this.image_url = url;
this.post_id = post_id;
}
}
}
thanks in advance
robert
ok i figured out what was wrong. i had to convert the position var to a string using String.valueOf(position);
here is the complete code: