java - ItemOnClick 监听器 Android

标签 java android listactivity

我正在尝试在 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/

相关文章:

android - 如何将数据从上下文菜单传递到 Android 中的警报对话框?

android - 类扩展 ListActivity "whose id attribute is ' android.R.id.list'"

java - 使用 Jsoup 递归执行器

java - fillRect() 使用哪个坐标?

java - 从 HttpServletRequest 获取损坏的 cookie 值

java - 如何在android中使用java在mysql数据库中保存值

android - java.lang.IllegalStateException : Fragment already added exception for BottomSheetDialogFragment 错误

java - 在Java中读取一个标签中包含多个值的xml文件

android - react-native-maps 与 react-native 0.19.0 的集成问题

数据库更改时,Android SimpleCursorAdapter 不会更新