ListView OnClicklistener仅返回单个json项目值

时间:2019-02-18 16:46:06

标签: java android json listview android-volley

我创建了一个列表视图,它将使用齐射库显示来自json的一些youtube视频列表(标题,缩略图,视频代码)。列表按预期显示。然后,我为列表视图实现了onclick侦听器。这是代码

// 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.setPYear(obj.getString("time"));
                            videocode = (obj.getString("videocode"));


                            //movie.setRating(((Number) obj.get("rating"))
                                //    .doubleValue());
                            //movie.setYear(obj.getInt("releaseYear"));

                            // Genre is json array
                          //  JSONArray genreArry = obj.getJSONArray("genre");
                      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) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            hidePDialog();

        }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(movieReq);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent videoplayer = new Intent(Videos.this, VideoPlayer.class);
            //String videocode = null;
            videoplayer.putExtra("videocode", videocode);
            startActivity(videoplayer);
            finish();


        }
    });

因此,单击列表项后,另一个活动将打开并播放视频。要播放视频,需要YouTube视频代码,这是我从Json获得的,并使用putExtra将价值转移给了玩家活动。

我面临的问题 单击任何视频在列表视图中播放仅播放第一个视频。意味着假设列表显示2个视频-Video1和Video2。自然,单击video1应该播放video1,单击video2应该播放视频2。但是发生的是我单击Video1或Video2或Video3,播放器仅播放了video1。

这是JSON文件 http://angelqr.cf/api.php

1 个答案:

答案 0 :(得分:0)

您必须从电影列表中获取视频代码。首先,分别为每部电影添加视频代码。

movie.setVideocode(obj.getString("videocode"));
 //videocode = (obj.getString("videocode"));

然后创建一个用于提取特定电影的视频代码的功能。

public String getVideocode(int position) {
  return movieList.get(position).getVideocode();
}

然后从您的听众的代码中调用它。

videoplayer.putExtra("videocode", getVideocode(position));