【问题标题】:Listview onItemClickListener obtaining dataListview onItemClickListener 获取数据
【发布时间】:2015-08-22 08:55:55
【问题描述】:

我在内部存储中保存了一个字符串数组,我正在使用它从 Parse.com 检索特定用户的名称。这是代码:

SharedPreferences settings = getSharedPreferences("NotificationIDs", Context.MODE_PRIVATE);
    Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>());

    final ListView idList;
    idList = (ListView) findViewById(android.R.id.list);

    final ArrayAdapter<String> str = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_list_item_1, new ArrayList<String>());
    idList.setAdapter(str);

    for(String userIds : myStrings) {
        ParseQuery<ParseObject> query = ParseQuery.getQuery("_User");
        query.getInBackground(userIds, new GetCallback<ParseObject>() {
            @Override
            public void done(ParseObject parseObject, ParseException e) {
                String name = parseObject.getString("fullname");
                Log.d("These are the names: ", name);

                str.add(name);
            }
        });
    }

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

            String names = str.getItem(position);
            Toast.makeText(UserListForHistory.this, names, Toast.LENGTH_SHORT).show();

        }
    });

有没有办法配置它,以便当我单击一个项目时,它会显示保存在“myString”数组中的用户 ID?因为我想显示一个包含特定名称的列表,但单击时我想获取该特定用户的 objectid。 我知道如何做到这一点的唯一方法是将 String UserIds 直接保存到适配器,然后它会在列表中显示 id 而不是名称。

//编辑解决方案

SharedPreferences settings = getSharedPreferences("NotificationIDs", Context.MODE_PRIVATE);
    Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>());
    final List<String> users = new ArrayList<>();

    final ListView idList;
    idList = (ListView) findViewById(android.R.id.list);

    final ArrayAdapter<String> str = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_list_item_1, new ArrayList<String>());
    idList.setAdapter(str);

    for(final String userIds : myStrings) {
        ParseQuery<ParseObject> query = ParseQuery.getQuery("_User");
        query.getInBackground(userIds, new GetCallback<ParseObject>() {
            @Override
            public void done(ParseObject parseObject, ParseException e) {

                String name = parseObject.getString("fullname");
                Log.d("These are the names: ", name);

                str.add(name);
                users.add(userIds);
            }
        });
    }

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

            String user = users.get(position);
            Toast.makeText(UserListForHistory.this, user, Toast.LENGTH_SHORT).show();

        }
    });

【问题讨论】:

    标签: android arrays listview android-listview parse-platform


    【解决方案1】:

    如果我理解,这是这样做的一种方法:

    SharedPreferences settings = getSharedPreferences("NotificationIDs", Context.MODE_PRIVATE);
        Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>());
        List<ParseObject> users = new ArrayList<>();
    
    final ListView idList;
    idList = (ListView) findViewById(android.R.id.list);
    
    final ArrayAdapter<String> str = new ArrayAdapter<>(getBaseContext(), android.R.layout.simple_list_item_1, new ArrayList<String>());
    idList.setAdapter(str);
    
    for(String userIds : myStrings) {
        ParseQuery<ParseObject> query = ParseQuery.getQuery("_User");
        query.getInBackground(userIds, new GetCallback<ParseObject>() {
            @Override
            public void done(ParseObject parseObject, ParseException e) {
    
                String name = parseObject.getString("fullname");
                Log.d("These are the names: ", name);
    
                str.add(name);
                users.add(parseObject);
            }
        });
    }
    
    idList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
            ParseObject user = users.get(position);
            Toast.makeText(UserListForHistory.this, user.getString("userIDs"), Toast.LENGTH_SHORT).show();
    
        }
    });
    

    如果不起作用,请在下面发表评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2012-04-17
      相关资源
      最近更新 更多