【问题标题】:How to implement OnItemLongClickListener on ListView from array / json?如何从数组/ json 在 ListView 上实现 OnItemLongClickListener?
【发布时间】:2018-05-21 00:33:49
【问题描述】:

我有一个电影列表,当我长按电影时,我想显示电影的概要。我尝试运行这个简单的代码,但它没有返回值。 PS:我在https://app.subarnanto.com/api/inventory做的json其实不是电影列表,我只是学会了在nodejs和mysql上创建一个api来完成我的学校作业。 谢谢你。

private static final String TAG = "MainActivity";
    String url = "https://app.subarnanto.com/api/inventory";
//    String url = "https://www.subarnanto.com/api/andri.json";
    ListView list;
    private List<MovieDataSet> listMovie = new ArrayList<>();
    private MovieAdapter movieAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = (ListView)findViewById(R.id.list);

        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        JsonArrayRequest jar = new JsonArrayRequest(url, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                //Toast.makeText(MainActivity.this, response.toString(), Toast.LENGTH_LONG).show();
                listMovie.clear();
                for (int i=0; i<response.length(); i++) {
                    try {
                        JSONObject job = response.getJSONObject(i);
                        MovieDataSet mds = new MovieDataSet();
                        mds.setImageUrl(job.getString("image"));
                        mds.setJudul(job.getString("name"));
                        mds.setYear(job.getInt("serial"));
                        mds.setRating(job.getDouble("tag"));
                        listMovie.add(mds);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                movieAdapter = new MovieAdapter(MainActivity.this, listMovie);
                movieAdapter.notifyDataSetChanged();
                list.setAdapter(movieAdapter);

                list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                   @Override
                   public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                       Log.d(TAG, "onItemLongClick:" + listMovie.get(i));

                       Toast.makeText(MainActivity.this, "Anda menekan: " + listMovie.get(i), Toast.LENGTH_LONG).show();
                       return false;
                   }
                });
           }
    }

【问题讨论】:

  • “不返回值”是什么意思?您是否调试并单步执行并确认实际调用了 onResponse 回调?
  • 返回的不是电影描述的值(我想要的),而是返回类似变量的东西。它返回了类似“Anda menekan com.lindawxx@somenumber”的内容。应该是“Anda menekan some-movie-sypnosis”。
  • “它返回了类似变量的东西”是什么意思?它是什么”? “它”在哪里返回“变量”。请在您的描述中清楚。
  • 嗨@dominicoder 抱歉不清楚,我想截个图,但Android Studio 现在在将apk 安装到手机时出现错误,我无法使用AVD,因为我的电脑不支持VTx。我会在手机上运行后回复您,感谢您抽出宝贵时间回复。
  • 嗨@dominicoder,我刚刚上传了一张图片。看看底部。它应该显示描述,但它显示了其他内容。如果您需要任何信息,请告诉我。谢谢。

标签: android arrays listview onitemlongclicklistener


【解决方案1】:

使用如下代码

list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
               @Override
               public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
                   Log.d(TAG, "onItemLongClick:" + listMovie.get(i));

                   Toast.makeText(MainActivity.this, "Anda menekan: " + listMovie.get(i).getSynopsis/*this from your MovieDataSet model class*/ , Toast.LENGTH_LONG).show();
                   return false;
               }
            });

【讨论】:

  • 不客气,@EkoAndri 如果我的回答能帮助你支持我的回答
  • 嗨 @SamRaju 我赞成你的回答,但我的代表次数低于 15 次,所以它不会出现。
  • 没关系@EkoAndri 快乐编码 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多