我正在尝试在 wingnity 上找到的这段代码中实现一个 onClick 监听器。
他们提供的代码工作得很好,但我想在单击每个列表项时启动一个新 Intent 并显示来自该特定 channel 的视频。这里是返回的Json对象
{"videos":[{"Channel":"Google Developers","Youtube":"GoogleDevelopers","Image":"default.jpg"},{"Channel":"PHP Academy","Youtube":"phpacademy","Image":"default.jpg"},{"Channel":"Slidenerd","Youtube":"slidenerd","Image":"default.jpg"}]}
这是我的 Java 文件 索引
package com.talagbe.community;
import java.io.IOException;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.loopj.android.http.AsyncHttpClient;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;
public class Index extends Activity {
ListView list;
VideoAdapter adapter;
ArrayList<videos> videolist;
String url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.index);
url="http://10.0.2.2/churchwebs/photo/";
list = (ListView) findViewById(R.id.list);
videolist = new ArrayList<videos>();
new Task().execute("http://10.0.2.2/churchwebs/libs/channel_list.php");
}
public class Task extends AsyncTask<String,Void, Boolean>
{
@Override
protected Boolean doInBackground(String... params) {
try {
HttpClient client= new DefaultHttpClient();
HttpPost post =new HttpPost(params[0]);
HttpResponse response= client.execute(post);
int status= response.getStatusLine().getStatusCode();
if(status==200){
HttpEntity entity= response.getEntity();
String data = EntityUtils.toString(entity);
JSONObject jobject= new JSONObject(data);
JSONArray jarray = jobject.getJSONArray("videos");
for(int i=0; i<jarray.length();i++){
videos v = new videos();
JSONObject videos= jarray.getJSONObject(i);
v.setUser(videos.getString("Channel"));
v.setChannel(videos.getString("Youtube"));
v.setImage(url+videos.getString("Image"));
String c=(url+videos.getString("Image"));
Log.d("videos",c);
videolist.add(v);
}
return true;
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
@Override
protected void onPostExecute(Boolean result) {
if(result==false){
Log.i("Error","Server did not respond");
}else{
VideoAdapter vadapter = new VideoAdapter(getApplicationContext(),R.layout.videos,videolist);
list.setAdapter(vadapter);
}
}
}
}
视频.java
package com.talagbe.community;
public class videos {
private String channel;
private String user;
private String image;
public videos(){
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getChannel() {
return channel;
}
public void setChannel(String channel) {
this.channel = channel;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
和videoadpater.java
package com.talagbe.community;
import java.util.ArrayList;
import java.util.List;
import com.loopj.android.image.SmartImageView;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.VideoView;
public class VideoAdapter extends ArrayAdapter<videos> {
ArrayList<videos> varray;
int Resource;
Context context;
LayoutInflater inflater;
public VideoAdapter(Context context, int resource, ArrayList<videos> objects) {
super(context, resource, objects);
// TODO Auto-generated constructor stub
varray=objects;
Resource= resource;
this.context=context;
inflater= (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if(convertView==null){
convertView= inflater.inflate(Resource,null);
holder= new ViewHolder();
holder.image= (SmartImageView) convertView.findViewById(R.id.imageView1);
holder.channeltxt= (TextView) convertView.findViewById(R.id.textView1);
holder.usertxt= (TextView) convertView.findViewById(R.id.textView2);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
holder.image.setImageUrl(varray.get(position).getImage());
holder.channeltxt.setText(varray.get(position).getChannel());
holder.usertxt.setText(varray.get(position).getUser());
return convertView;
}
static class ViewHolder{
public SmartImageView image;
public TextView channeltxt;
public TextView usertxt;
}
}
我想知道如何为列表中的每个项目实现 Itemclicked,在下一个 Activity 中检索每个用户的 youtube 用户名。
最佳答案
在你的执行后
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getBaseContext(),videolist.get(position).getuser(),Toast.LENGTH_SHORT).show();
}
});
关于java - ItemOnClick 监听器 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341850/