如何将一个 activity 列表中的字符串传递给另一个列表

How to pass a string from a list in one activity to another

我想做的是将用户列表转换为字符串,然后单击将选定的字符串传递给下一个 activity。我在应用程序上使用的消息传递功能上尝试了此功能,并且运行良好。现在我正在尝试使用画廊功能。这部分应该做的是在解析中找到所有用户,将它们转换为字符串并将它们显示在列表视图中。单击它应该收集列表中的字符串并在图库视图中使用它 activity 以显示用户名等于从列表中选择的图像的所有图像。

ListUserActivity

保存在数据库中的所有用户名的列表视图。

//display clickable a list of all users
private void setConversationsList() {
    currentUserId = ParseUser.getCurrentUser().getObjectId();
    names = new ArrayList<String>();

    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.whereNotEqualTo("objectId", currentUserId);
    query.findInBackground(new FindCallback<ParseUser>() {
        public void done(List<ParseUser> userList, com.parse.ParseException e) {
            if (e == null) {
                for (int i=0; i<userList.size(); i++) {
                    names.add(userList.get(i).getUsername().toString());
                }

                usersListView = (ListView)findViewById(R.id.usersListView);
                namesArrayAdapter =
                        new ArrayAdapter<String>(getApplicationContext(),
                                R.layout.user_list_item, names);
                usersListView.setAdapter(namesArrayAdapter);

                usersListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> a, View v, int i, long l) {
                        openConversation(names, i);
                    }
                });

            } else {
                Toast.makeText(getApplicationContext(),
                        "Error loading user list",
                        Toast.LENGTH_LONG).show();
            }
        }
    });
}

单击列表视图中的名称会发生​​什么。

public void openConversation(ArrayList<String> names, int pos) {
    ParseQuery<ParseUser> query = ParseUser.getQuery();

    query.whereEqualTo("username", names.get(pos));
    query.findInBackground(new FindCallback<ParseUser>() {
        public void done(List<ParseUser> user, com.parse.ParseException e) {
            if (e == null) {
                // Intent intent = new Intent(getApplicationContext(), GridActivity.class);
                Intent intent = new Intent(ListUsersActivity.this, GridActivity.class);
                intent.putExtra("RECIPIENT_ID", user.get(0).getObjectId());
                startActivity(intent);
            } else {
                Toast.makeText(getApplicationContext(),
                        "Error finding that user",
                        Toast.LENGTH_SHORT).show();
            }
        }
    });
}

图库活动

我尝试将 RECIPIENT_ID 转换为名为 recipientId 的字符串变量,并将其添加到 query.whereEqualTo("username", recipientId); 但它一直在创建一条消息,告诉我它是 NULL。

 @Override
    protected Void doInBackground(Void... params) {
        // Create the array

        Intent intent = getIntent();
        recipientId = intent.getStringExtra("RECIPIENT_ID");
        currentUserId = ParseUser.getCurrentUser().getObjectId();


        phonearraylist = new ArrayList<PhoneList>();
        try {

            ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("ImageUpload");


            usernametxt = usernameimgshow.getText().toString();
            //query.whereEqualTo("username", userstr);
            query.whereEqualTo("username", recipientId);
            query.orderByAscending("createdAt");
            ob = query.find();
            for (ParseObject country : ob) {
                ParseFile image = (ParseFile) country.get("ImageFile");
                PhoneList map = new PhoneList();
                map.setPhone(image.getUrl());
                phonearraylist.add(map);
            }
        } catch (ParseException e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return null;
    }

如果第二个 activity 的启动模式是 singleInstance 或 singleTop,并且它在您发送 intent 时已经创建,那么您想要的 intent 将到达 onNewIntent。如果是这种情况,您当前的 getIntent 仅 returns 首次创建 activity 时的意图。

我自己找到了解决问题的简单方法。我在使用 Extra intents 时有点错误,希望这对以后的人有所帮助。

第一个Activity

将字符串放入extra,然后选择要发送到的activity。

Intent i = new Intent(firstActivity.this, secondActivity.class);
    final EditText usernameimgshow = (EditText) findViewById(R.id.usernameimgshow);
    String userMessage = usernameimgshow.getText().toString();
    i.putExtra("appleMessage", userMessage);
    startActivity(i);

第二个Activity

这就是您在第二个 activity 上获取字符串的方式。将变量声明为字符串,您可以在 activity.

中的任何位置使用它
Bundle appleData = getIntent().getExtras();
    if(appleData==null) {
        return;
    }
    //String appleMessage = appleData.getString("appleMessage");
    appleMessage = appleData.getString("appleMessage");