如何将一个 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");
我想做的是将用户列表转换为字符串,然后单击将选定的字符串传递给下一个 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");