ListView OnClicklistener 仅返回单个 json 项值

Posted

技术标签:

【中文标题】ListView OnClicklistener 仅返回单个 json 项值【英文标题】:ListView OnClicklistener Returns Only single json item value 【发布时间】:2019-07-12 02:34:33 【问题描述】:

我创建了一个列表视图,它将使用 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】:

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

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

然后制作一个函数来获取特定电影的视频代码。

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

然后从你的监听器代码中调用它。

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

【讨论】:

以上是关于ListView OnClicklistener 仅返回单个 json 项值的主要内容,如果未能解决你的问题,请参考以下文章

java ListView的OnClickListener

Listview ArrayAdapter 自定义项 onClickListener 仅第一次工作

在 listview Android 1.6 中同时使用 onClickListener 和 onLongClickListener

为 ListView 的多行中的多个 TextView 设置 onClickListener

ListView 在活动 onCreate 方法或按钮 onClickListener 方法中不更新

添加 RadioButton 后 ListView onClickListener() 不起作用