2

I am programming a messaging app and I want to add users in a group. However, when a list of users pops up and I select one from the list, it doesn't pass the string (the username) to the other activity. All I get is an empty list.

Here is my code: First Activity = Sending data (usernames from list) through 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();
            }
        }
    });

}

Second Activity = Receiving data from 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;
    }
}

2 Answers2

2

Since the default value for a boolean is false, the code is never called because

if(userIsSelected){

will always evaluate to false since you have declared the varaible as

private boolean userIsSelected;

and the first snippet here is in onCreate() so it will only run the first time the Activity is created.

Maybe you are wanting to call checkIfUserIsSelected(someUser) before that code but without more context of what you hope to accomplish, it's hard to say.

Possibly, you want to use startActivityForResult() in some way?

Community
  • 1
  • 1
codeMagic
  • 44,549
  • 13
  • 77
  • 93
0

In addition to @codeMagic 's answer (Since your boolean value is false, it won't call the statement that you are adding the new data). It's also because of you parse the Data "username" after you setAdapter of your ListView. So basically you are setting the data, and then trying to add the new data you parsed to the list. Either you need to do it before setting your data set to your adapter, or call addedUsersAdapter.notifyDataSetChanged() to refresh your listView's data set.

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();
}
osayilgan
  • 5,873
  • 7
  • 47
  • 68