【问题标题】:ListView setOnItemClickListener with JSONArray and JSONObjectListView setOnItemClickListener 与 JSONArray 和 JSONObject
【发布时间】:2018-02-11 11:24:18
【问题描述】:

我遇到了来自 listView 的 setOnItemClickListener 的问题。

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ItemClick();
            }
        });

还有ItemClick:

private int ItemClick (){
    try {
        JSONArray ja=new JSONArray(data);
        JSONObject jo=null;

        for(int i=0;i<ja.length();i++)
        {
            jo=ja.getJSONObject(i);
            String nr_telefon=jo.getString("nr_telefon");

            Toast.makeText(MainActivity.this,nr_telefon,Toast.LENGTH_SHORT).show();

        }

        return 1;
    } catch (JSONException e) {
        e.printStackTrace();
    }

    return 0;

}

问题在于返回不起作用(我认为)当我单击 listView 中的一个项目时,就像我单击了所有项目一样。单击时将显示从第一项到最后一项的所有带有 nr_telefon 的吐司。有什么问题以及如何解决?

列表视图中的一项是这样创建的:

 String  nr_masina=jo.getString("nr_masina");
   String proprietar=jo.getString("proprietar");
   String nr_telefon=jo.getString("nr_telefon");
   names.add(nr_masina + "\n" + proprietar + "\n" + nr_telefon);

【问题讨论】:

    标签: android json listview


    【解决方案1】:

    目前,ItemClick 方法为JSONArray 中的每个项目显示Toasts

    尝试在方法中添加参数int position,并用它传递位置:

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ItemClick(position);
            }
    

    请注意,for 循环已消失。它曾经为JSONArray ja 中的每个项目显示Toast。现在该逻辑只被调用一次,对于索引为position 的项目:

        private int ItemClick(int position){
            try {
                JSONArray ja = new JSONArray(data);
    
                jo = ja.getJSONObject(position);
                String nr_telefon = jo.getString("nr_telefon");        
                Toast.makeText(MainActivity.this,nr_telefon,Toast.LENGTH_SHORT).show();
            }
    
                return 1;
            } catch (JSONException e) {
                e.printStackTrace();
            }
    
            return 0;
        }
    

    【讨论】:

      【解决方案2】:

      因为您没有传递列表视图中单击项目的位置。使用此代码

      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  ItemClick(position);
              }
          });
      

      以及对此的更改方法

      private int ItemClick (int pos){
      try {
          JSONArray ja=new JSONArray(data);
          JSONObject jo=null;
      
      
              jo=ja.getJSONObject(pos);
              String nr_telefon=jo.getString("nr_telefon");
      
              Toast.makeText(MainActivity.this,nr_telefon,Toast.LENGTH_SHORT).show();
      
      
      
          return 1;
      } catch (JSONException e) {
          e.printStackTrace();
      }
      
      return 0;
      

      }

      【讨论】:

      • 工作完美。谢谢你!
      猜你喜欢
      • 1970-01-01
      • 2018-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多