簡體   English   中英

如何將數組列表從MainActivity傳遞到Main2Activity以顯示列表視圖?

[英]How to pass arraylist from MainActivity to display listview to Main2Activity?

我有2個活動“ MainActivity”,“ Main2Activity”和2個類“ User”,“ UserAdapter”。 我想要的實際上想要的解釋如下。

  1. 首先,我想通過單擊“提交”按鈕從“ MainActivity”中插入多個數據(如果我輸入“ name”和“ email” 5次,則我插入了5個數據)。

  2. 然后,我想在“ Main2Activity”中將所有數據顯示為listview,這是另一個活動。

  3. 但是,當我插入多個數據時,我只能看到我最后插入的數據。

  4. 我的意思是,如果我通過點擊提交按鈕插入第一數據(約翰,john123 @ gmail.com),第二數據(櫻桃,cherry45 @ gmail.com),我可以看到同一活動中的所有數據均為“ MainActivity”,並且只能看到第二個活動中的最后一個數據(櫻桃,cherry45 @ gmail.com)為“ Main2Activity”。

  5. 誰能幫我從MainActivity傳遞整個arraylist以便在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);
}
}

=============== Main2Activity.java ================

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();
}

}

================== User.java =================

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;
}

}

=============== UserAdapter.java =================

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中看到的

這是我在MainActivity中看到的,我想將整個數組傳遞給Main2Activity

您的實現中存在很多問題。

  1. 除了活動之外,您不會在某些類中的任何地方保存User數據。
  2. 您沒有將所有數據傳遞給Main2Activity ,這就是為什么您只能看到一項的原因,而這也是最新添加的一項。

解:

  1. 將用戶數據保存在某些UserManager類中。 您可以使此類Singleton變得易於訪問。 提供將User添加到某些ArrayList的方法,以及提供get方法以檢索整個列表。

  2. 現在,只要您的Main2Activity啟動,就從UserManager獲取數據,然后將其顯示在列表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM