Android 如何将arraylist从MainActivity传递到display listview到Main2Activity?

Android 如何将arraylist从MainActivity传递到display listview到Main2Activity?,android,listview,android-arrayadapter,Android,Listview,Android Arrayadapter,我有两个活动MainActivity,Main2Activity和两个类User,UserAdapter。我真正想要的是下面的解释 首先,我想从MainActivity中插入几个数据,如果我插入了5次姓名和电子邮件,那么通过单击submit按钮,我已经插入了5个数据 然后我想在另一个活动Main2Activity中将所有数据显示为listview 但我只能看到我插入的最后一个数据,而我插入了几个数据 我是说如果我插入第一个数据John,john123@gmail.com,第二数据中心,cherr

我有两个活动MainActivity,Main2Activity和两个类User,UserAdapter。我真正想要的是下面的解释

首先,我想从MainActivity中插入几个数据,如果我插入了5次姓名和电子邮件,那么通过单击submit按钮,我已经插入了5个数据

然后我想在另一个活动Main2Activity中将所有数据显示为listview

但我只能看到我插入的最后一个数据,而我插入了几个数据

我是说如果我插入第一个数据John,john123@gmail.com,第二数据中心,cherry45@gmail.com通过单击提交按钮,我可以看到同一活动中的所有数据,该活动是主活动,只能看到最后的数据,cherry45@gmail.com在第二个活动中,这是主活动

有人能帮我将整个arraylist从MainActivity传递到listview中的Main2Activity吗?我的所有代码如下所示

===================MainActivity.java=================

package com.andromet.customlistview;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.LayoutInflater;`

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.Toast;

import java.io.Serializable;

import java.lang.reflect.Array;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

EditText editName, editEmail;
String name, email;
Intent intent;
UserAdapter adapter;

ListView listView;
ArrayList<User> users = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editName = findViewById(R.id.name);
    editEmail = findViewById(R.id.email);
    listView = findViewById(R.id.listView);
    adapter = new UserAdapter(this, users);
}

public void submit(View view) {
    name = editName.getText().toString();
    email = editEmail.getText().toString();

    listView.setAdapter(adapter);
    users.add(new User(name,email));
    intent = new Intent(MainActivity.this, Main2Activity.class);

    intent.putExtra("name", name);
    intent.putExtra("email", email);
    adapter.notifyDataSetChanged();
    Toast.makeText(this,"Total Items: " +users.size(), Toast.LENGTH_SHORT).show();
}

public void onListClicked(View view) {
    //intent = new Intent(MainActivity.this, Main2Activity.class);
    startActivity(intent);
}
}
package com.andromet.customlistview;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ListView;

import android.widget.Toast;

import java.util.ArrayList;

public class Main2Activity extends AppCompatActivity {

ListView listView;
UserAdapter adapter;
String name, email;
ArrayList<User> users = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    listView = findViewById(R.id.listView2);
    adapter = new UserAdapter(this, users);
    Bundle bundle = getIntent().getExtras();
    name = bundle.getString("name");
    email = bundle.getString("email");

    listView.setAdapter(adapter);
    users.add(new User(name, email));
    adapter.notifyDataSetChanged();
    Toast.makeText(this,"Total Items: " +users.size(), Toast.LENGTH_SHORT).show();
}

}
package com.andromet.customlistview;

public class User {

private String name;
private String email;

public User(String name, String email) {
    this.name = name;
    this.email = email;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String emial) {
    this.email = emial;
}

}
package com.andromet.customlistview;

import android.content.Context;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.TextView;

import java.util.ArrayList;

public class UserAdapter extends ArrayAdapter<User> {

private Context context;
private ArrayList<User> users;

public UserAdapter(Context context, ArrayList<User> users){
    super(context, 0, users);
    this.users = users;
    this.context = context;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View row = convertView;

    if (row == null){
        row = LayoutInflater.from(context).inflate(R.layout.mylist,parent,false);
    }
    User user = users.get(position);

    if (row != null){
        TextView textViewName = row.findViewById(R.id.view_name);
        TextView textViewEmail = row.findViewById(R.id.view_email);
        textViewName.setText(user.getName());
        textViewEmail.setText(user.getEmail());
    }

    return row;
}
}
===================UserAdapter.java=================

package com.andromet.customlistview;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.LayoutInflater;`

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.Toast;

import java.io.Serializable;

import java.lang.reflect.Array;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

EditText editName, editEmail;
String name, email;
Intent intent;
UserAdapter adapter;

ListView listView;
ArrayList<User> users = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editName = findViewById(R.id.name);
    editEmail = findViewById(R.id.email);
    listView = findViewById(R.id.listView);
    adapter = new UserAdapter(this, users);
}

public void submit(View view) {
    name = editName.getText().toString();
    email = editEmail.getText().toString();

    listView.setAdapter(adapter);
    users.add(new User(name,email));
    intent = new Intent(MainActivity.this, Main2Activity.class);

    intent.putExtra("name", name);
    intent.putExtra("email", email);
    adapter.notifyDataSetChanged();
    Toast.makeText(this,"Total Items: " +users.size(), Toast.LENGTH_SHORT).show();
}

public void onListClicked(View view) {
    //intent = new Intent(MainActivity.this, Main2Activity.class);
    startActivity(intent);
}
}
package com.andromet.customlistview;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ListView;

import android.widget.Toast;

import java.util.ArrayList;

public class Main2Activity extends AppCompatActivity {

ListView listView;
UserAdapter adapter;
String name, email;
ArrayList<User> users = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    listView = findViewById(R.id.listView2);
    adapter = new UserAdapter(this, users);
    Bundle bundle = getIntent().getExtras();
    name = bundle.getString("name");
    email = bundle.getString("email");

    listView.setAdapter(adapter);
    users.add(new User(name, email));
    adapter.notifyDataSetChanged();
    Toast.makeText(this,"Total Items: " +users.size(), Toast.LENGTH_SHORT).show();
}

}
package com.andromet.customlistview;

public class User {

private String name;
private String email;

public User(String name, String email) {
    this.name = name;
    this.email = email;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getEmail() {
    return email;
}

public void setEmail(String emial) {
    this.email = emial;
}

}
package com.andromet.customlistview;

import android.content.Context;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.TextView;

import java.util.ArrayList;

public class UserAdapter extends ArrayAdapter<User> {

private Context context;
private ArrayList<User> users;

public UserAdapter(Context context, ArrayList<User> users){
    super(context, 0, users);
    this.users = users;
    this.context = context;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View row = convertView;

    if (row == null){
        row = LayoutInflater.from(context).inflate(R.layout.mylist,parent,false);
    }
    User user = users.get(position);

    if (row != null){
        TextView textViewName = row.findViewById(R.id.view_name);
        TextView textViewEmail = row.findViewById(R.id.view_email);
        textViewName.setText(user.getName());
        textViewEmail.setText(user.getEmail());
    }

    return row;
}
}

在您的实现中有很多问题

除了活动之外,您没有像在某些类中那样将用户数据保存到任何位置。 您没有将所有数据传递给Main2Activity,因此您只能看到一个项目,这也是最新添加的项目。 解决方案:

在某个UserManager类中保存用户数据。为了便于访问,可以将此类设置为单例。提供将用户添加到某个ArrayList的方法和检索整个列表的get方法

现在,每当Main2活动启动时,从UserManager获取数据,然后将其显示在列表中


我不知道如何实现UserManager来保存和从中获取数据。我已经给出了我所有的源代码。请您合作,提供已实现的UserManager类和必要的源代码,以添加到Main2Activity类中。尽管我以其他方式解决了此问题,但还是可以这样做,谢谢您的大力帮助。我已经用字符串数组解决了这个问题。在运行应用程序之前,它会暂时保存数据。但这次我对此感到高兴可能的副本。查看接受答案中的singleton和其他选项,作为在活动之间存储和共享数据的方法。