android - putExtra 似乎根本不起作用。使用ListView获取字符串和使用listView显示字符串

标签 android listview android-intent android-activity arraylist

我正在编写一个消息应用程序,我想将用户添加到组中。但是,当弹出用户列表并且我从列表中选择一个用户时,它不会将字符串(用户名)传递给其他 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()以某种方式?

关于android - putExtra 似乎根本不起作用。使用ListView获取字符串和使用listView显示字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29377159/

相关文章:

android - AlphabetIndexer 不适用于自定义 ListView

android - 在 Android 中选择视频的最佳方式是什么

android - 定位小于它时,如何在 Android O 上创建快捷方式?

android - 无法使用 Android Gradle 插件 3.0.1 解决 assembleAndroidTest 任务的依赖关系

android - 防止 ToggleButton 切换状态

android - 在android中使用粘性标题在视差ListView上启用点击事件

java - zxing onActivityResults 未触发

android - 容器卡在应用程序 header 后面 (Android)

java - 如何将上传到云存储的图片调整为指定大小?

android - 如何从 onitemclick() 方法通知 DataSetChanged()?