【问题标题】:retrieve data from OnItemClickListener从 OnItemClickListener 检索数据
【发布时间】:2017-03-18 09:20:02
【问题描述】:

我必须读取 json 文件,有两个字段:name 和 id_name。我创建了一个数组列表。用户只能看到名称。当用户单击名称时,我必须获取 id。我只向您展示 AssyncTask doInBackground 过程的一部分。另外我用两个参数 name 和 id 创建了 class Name。

请帮助我。这是我的代码。

protected ArrayList<Name> doInBackground(String... params) {

            ArrayList<Name> nameList = new ArrayList<>();
            String result = "";
            ......

             for (int i = 0; i < rootArray.length(); i++) {

                    JSONObject nameObject = rootArray.getJSONObject(i);

                    String name = nameObject.getString("name");
                    String id = nameObject.getString("id_name");

                    nameList.add(new NAME(name, id));

                }

            return nameList;
        }

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                String my_id = adapter.getItem(position).toString();

            }
        });

非常感谢。

【问题讨论】:

  • 你试过我的答案了吗?
  • 好的,谢谢。 Сan 我问你关于这个话题的另一个问题吗?我的应用程序的下一步是在 Json 文件中检索四个变量(在这种情况下它们都是字符),并将它们中的每一个传递给另一个意图。如何将四的值传递给 onPostExecute?正如我所理解的,我可以在 PostExecute 上执行意图吗?谢谢

标签: android json arraylist onclick onitemclicklistener


【解决方案1】:
 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                TextView  tv_ID=(TextView)view.findViewById(R.id.tv_id);//Check your xml and set proper ID
                String my_id =tv_ID.getText().toString();
                Toast.makeText(CurrentActivity.this, my_id , Toast.LENGTH_SHORT).show();

            }
        });

【讨论】:

  • 我认为他在 xml 中没有 id textview。他只显示名称 textview。
  • @DharmbirSingh 那么你的逻辑是正确的
  • 谢谢。 Сan 我问你关于这个话题的另一个问题吗?我的应用程序的下一步是在 Json 文件中检索四个变量(在这种情况下它们都是字符),并将它们中的每一个传递给另一个意图。如何将四的值传递给 onPostExecute?据我了解,我可以在 PostExecute 上执行意图吗?谢谢
【解决方案2】:

为这个活动声明你的全局数组,比如

ArrayList<Name> nameList = new ArrayList<>();

然后

protected ArrayList<Name> doInBackground(String... params) {

            String result = "";
            ......

             if(nameList != null)
                nameList.clear();

             for (int i = 0; i < rootArray.length(); i++) {

                    JSONObject nameObject = rootArray.getJSONObject(i);

                    String name = nameObject.getString("name");
                    String id = nameObject.getString("id_name");

                    nameList.add(new NAME(name, id));

                }

            return nameList;
        }


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      Name name = nameList.get(position);
                      String id = name.getId();
                      String id = name.getName();

            }
        });

注意:如果 Name 模型没有 getter 方法,则创建 getter 方法。

【讨论】:

  • 好的,谢谢。 Сan 我问你关于这个话题的另一个问题吗?我的应用程序的下一步是在 Json 文件中检索四个变量(在这种情况下它们都是字符),并将它们中的每一个传递给另一个意图。如何将四的值传递给 onPostExecute?正如我所理解的,我可以在 PostExecute 上执行意图吗?谢谢
  • @AlexeyShpaner 是的,你可以通过,但是当你想打开下一个活动时,你可以传入意图。如果它解决了您的问题,请接受我的回答。谢谢
  • 当然。我不明白如何将四个变量的值从 doInBackground 传递到 onPostExecute?可以举个例子吗?
  • 制作4个全局变量,然后在doInBackground中赋值,在postExecute中访问。希望它会帮助你。如果没有帮助,请在此处粘贴您的课程代码pastebin.com
  • 我现在就试试,但是什么样的数据呢?我必须在 AsyncTask 中编写:公共类 DownLoad 扩展 AsyncTask 。我应该写什么而不是 ArrayList?
【解决方案3】:

试试 ListView.get(位置); 代替 Adapter.get(位置);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 2014-12-12
    • 2013-12-17
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多