Android ListView上的位置始终为空
我正在玩我在网上找到的一段代码,我正在尝试向listview添加一个单击侦听器,并获取项目的位置。然而,由于某些原因,该位置总是空的。这是我的密码:Android ListView上的位置始终为空,android,listview,position,Android,Listview,Position,我正在玩我在网上找到的一段代码,我正在尝试向listview添加一个单击侦听器,并获取项目的位置。然而,由于某些原因,该位置总是空的。这是我的密码: listView.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Log
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);
}
});
listView.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Log.v(“位置”,位置);//位置始终为空
意图i=新意图(例如.this,ShowReleases.class);
i、 putExtra(“id”,位置);
startActivityForResult(i,活动\创建);
}
});
我还添加了完整的代码,以防万一:
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;
}
}
}
package.com.example;
导入java.util.ArrayList;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.ResponseHandler;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.BasicResponseHandler;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.json.simple.JSONArray;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入android.app.Activity;
导入android.content.Intent;
导入android.graphics.Bitmap;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.ListView;
导入android.widget.Toast;
公共类示例扩展了活动{
私有静态最终整数活动_CREATE=0;
公共位图占位符;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayList tweets=getTweets(“android”,1);
ListView ListView=(ListView)findViewById(R.id.ListViewId);
setAdapter(新的TweetItemAdapter(this,R.layout.listitem,tweets));
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Log.v(“位置”,位置);//位置始终为空
意图i=新意图(例如.this,ShowReleases.class);
i、 putExtra(“id”,位置);
startActivityForResult(i,活动\创建);
}
});
}
公共ArrayList getTweets(字符串搜索词,int页){
字符串搜索URL=”http://search.twitter.com/search.json?q=@“+搜索条件;
Log.v(“searchUrl”,searchUrl);
ArrayList tweets=新建ArrayList();
HttpClient=new DefaultHttpClient();
HttpGet=newhttpget(searchUrl);
ResponseHandler ResponseHandler=新BasicResponseHandler();
字符串responseBody=null;
试一试{
responseBody=client.execute(get,responseHandler);
}捕获(例外情况除外){
例如printStackTrace();
}
JSONObject JSONObject=null;
JSONParser=新的JSONParser();
试一试{
objectobj=parser.parse(responseBody);
jsonObject=(jsonObject)obj;
}捕获(例外情况除外){
Log.v(“测试”,“异常1:+ex.getMessage());
}
JSONArray arr=null;
试一试{
objectj=jsonObject.get(“结果”);
arr=(JSONArray)j;
}捕获(例外情况除外){
makeText(这是“JSON错误”,Toast.LENGTH_LONG);
Log.v(“测试”,“异常2:+ex.getMessage());
}
用于(对象t:arr){
Tweet=新Tweet(
((JSONObject)t).get(“来自用户”).toString(),
((JSONObject)t.get(“text”).toString(),
((JSONObject)t).get(“profile\u image\u url”).toString(),
((JSONObject)t.get(“id”).toString()
);
添加(tweet);
}
返回推文;
}
/**班级**/
公共类推文{
公共字符串用户名;
公共字符串消息;
公共字符串图像的url;
公共字符串post_id;
公共布尔usernameSet=false;
公共布尔messageSet=false;
公共布尔图像集=false;
公共位图化身;
公共推文(字符串用户名、字符串消息、字符串url、字符串帖子id){
this.username=用户名;
this.message=消息;
this.image_url=url;
this.post\u id=post\u id;
}
}
}
提前谢谢
robert首先检查列表大小,我在我的应用程序中使用了相同的东西,它工作正常。 在第一次活动中,我就这样通过了
in.putExtra(id, position);
在第二次活动中,我这样写是为了得到数据
Bundle extras = getIntent().getExtras();
arg=extras.getInt(id);
System.out.println("Position:"+arg);
您可以看到构造函数AdapterView(上下文),所以使用get application Context。 或访问此链接
希望这能对你有所帮助好的,我知道出了什么问题。我必须使用string.valueOf(position)将position变量转换为字符串; 以下是完整的代码:
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Log.v("position", String.valueOf(position));
Intent i = new Intent(Example.this, ShowReleases.class);
i.putExtra("id", String.valueOf(position));
startActivityForResult(i, ACTIVITY_CREATE);
}
});
listView.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
Log.v(“位置”,String.valueOf(位置));
意图i=新意图(例如.this,ShowReleases.class);
i、 putExtra(“id”,String.valueOf(position));
startActivityForResult(i,活动\创建);
}
});
在listView.setAdapter中尝试“getApplicationContext()”而不是此选项。我认为它的适配器类的问题是它没有返回任何东西,我在logcat中看到的只是一个空字段,而不是一个数字。你真的收到了数组列表中的任何东西吗?你试过记录这些东西吗?你好,谢谢你的回复。我不熟悉安卓系统。你能再解释一下吗?如果你能发布一些代码让我理解那就太好了你好,你能再解释一下吗?我刚接触安卓系统,对它了解不多。你能给我一个电话吗