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

我正在编写消息传递应用程序,我想在群组中添加用户。但是,当弹出用户列表并且我 select 列表中的一个时,它不会将字符串(用户名)传递给另一个 activity。我得到的只是一个空列表。

这是我的代码: 首先 Activity = 通过 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();
            }
        }
    });

}

第二个Activity = 从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;
    }
}

因为 the default value for a booleanfalse,所以永远不会调用代码,因为

if(userIsSelected){

将始终评估为 false 因为您已将变量声明为

private boolean userIsSelected;

这里的第一个代码片段在 onCreate() 中,因此它只会在第一次创建 Activity 时 运行。

也许您想在该代码之前调用 checkIfUserIsSelected(someUser),但没有更多关于您希望完成的内容的上下文,这很难说。

可能,您想以某种方式使用 startActivityForResult()

除了@codeMagic 的回答(因为你的布尔值为假,它不会调用你正在添加新数据的语句)。也是因为你在ListView的setAdapter之后解析了Data "username"。所以基本上你是在设置数据,然后尝试将你解析的新数据添加到列表中。您需要在将数据集设置到适配器之前执行此操作,或者调用 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();
}