putExtra 似乎根本不起作用。使用ListView获取字符串,使用listView显示字符串
Posted
技术标签:
【中文标题】putExtra 似乎根本不起作用。使用ListView获取字符串,使用listView显示字符串【英文标题】:putExtra doesn't seem to be working at all. Using ListView to get a string and using listView to display a string 【发布时间】:2015-06-05 07:05:19 【问题描述】:我正在编写一个消息传递应用程序,我想在组中添加用户。但是,当弹出用户列表并且我从列表中选择一个时,它不会将字符串(用户名)传递给另一个活动。我得到的只是一个空列表。
这是我的代码: 第一个活动 = 通过 putExtra() 发送数据(列表中的用户名)
public class ListUsersActivity extends Activity
private String currentUserId;
private ArrayAdapter<String> namesArrayAdapter;
private ArrayList<String> names;
private ListView usersListView;
private Button logoutButton;
private ProgressDialog progressDialog;
private BroadcastReceiver receiver = null;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_users);
Parse.initialize(this, "embpZ0spRUv5XwDgI23innll1sgHg0KZNiKzg6kl", "LPsU4UffPeqFXkQB1GfLCIJ4kvg20llPgbOnLise");
currentUserId = ParseUser.getCurrentUser().getObjectId();
names = new ArrayList<>();
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)
Intent goBackToAddPoolIntent = new Intent(ListUsersActivity.this, addNewPoolActivity.class);
addNewPoolActivity checker = new addNewPoolActivity();
checker.checkIfUserIsSelected(usersListView.getItemAtPosition(i).toString());
goBackToAddPoolIntent.putExtra("username", usersListView.getItemAtPosition(i).toString());
startActivity(goBackToAddPoolIntent);
);
else
Toast.makeText(getApplicationContext(),
"Error loading user list",
Toast.LENGTH_LONG).show();
);
第二个活动 = 从 putExtra() 接收数据
public class addNewPoolActivity extends Activity
private static ArrayList<String> addedUsers;
private ArrayAdapter <String> addedUserAdapter;
private boolean userIsSelected;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_new_pool);
Button addMembers = (Button) findViewById(R.id.bAddMembers);
addedUsers = new ArrayList<>();
//addedUsers.add("Group Members");
addMembers.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent showUsersToSelect = new Intent(addNewPoolActivity.this, ListUsersActivity.class);
startActivity(showUsersToSelect);
);
ListView addedUsersList = (ListView) findViewById(R.id.addedUsersListView);
addedUserAdapter = new ArrayAdapter<>(this, R.layout.user_list_item, addedUsers);
addedUsersList.setAdapter(addedUserAdapter);
if(userIsSelected)
Bundle extras = getIntent().getExtras();
addedUsers.add(extras.getString("username"));
public void checkIfUserIsSelected(String user)
if (user!=null)
userIsSelected = true;
else
userIsSelected = false;
【问题讨论】:
你在哪里打电话给putExtra
?
它在onItemClick方法@BishopBarber的第一个活动中
【参考方案1】:
因为the default value for a boolean 是false
,所以代码永远不会被调用,因为
if(userIsSelected)
将始终评估为 false
,因为您已将变量声明为
private boolean userIsSelected;
这里的第一个 sn-p 在 onCreate()
中,所以它只会在第一次创建 Activity
时运行。
也许您想在该代码之前调用checkIfUserIsSelected(someUser)
,但没有更多关于您希望完成的内容的上下文,很难说。
您可能想以某种方式使用startActivityForResult()?
【讨论】:
【参考方案2】:除了@codeMagic 的答案(由于您的布尔值为 false,它不会调用您正在添加新数据的语句)。这也是因为您在 ListView 的 setAdapter 之后解析了数据“用户名”。所以基本上你是在设置数据,然后尝试将你解析的新数据添加到列表中。您需要在将数据集设置为适配器之前执行此操作,或者调用 addedUsersAdapter.notifyDataSetChanged()
以刷新您的 listView 的数据集。
addedUserAdapter = new ArrayAdapter<>(this, R.layout.user_list_item, addedUsers);
addedUsersList.setAdapter(addedUserAdapter);
Bundle extras = getIntent().getExtras();
// Check if the username has been sent to this Activity.
if(extras != null && extras.containsKey("username"))
addedUsers.add(extras.getString("username"));
// Refresh Your Data Set
addedUserAdapter.notifyDataSetChanged();
【讨论】:
以上是关于putExtra 似乎根本不起作用。使用ListView获取字符串,使用listView显示字符串的主要内容,如果未能解决你的问题,请参考以下文章
从 Android 上的 Qt 应用程序通过(显式)意图调用外部活动 - putExtra 不起作用