我想知道是否有可能在android studio中的不同活动中为两个不同的列表视图创建一个arraylist?

时间:2016-11-11 16:44:03

标签: android listview arraylist

这是我将人物对象添加到arraylist的活动,我计划将相同的arraylist带到另一个活动(editList.java)以显示相同的列表视图,但我不知道如何。我已经研究了这个主题,但只有如何将多个arraylist放入一个列表视图的帮助。请注意我对android编程很新。

people.java

public class people extends AppCompatActivity {
Button btnAdd;
Button btnDelete;
ListView lvPeople;


ArrayList<person> alPeople = new ArrayList<person>();
ArrayAdapter<person> aaPeople;


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

    btnAdd = (Button) findViewById(R.id.btnAdd);
    btnDelete = (Button) findViewById(R.id.btnDelete);
    lvPeople = (ListView) findViewById(R.id.lvPeople);


    aaPeople = new ArrayAdapter<person>(this, android.R.layout.simple_list_item_1, alPeople);
    lvPeople.setAdapter(aaPeople);

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View viewDialog = inflater.inflate(R.layout.add_dialog, null);
            final EditText etName = (EditText) viewDialog.findViewById(R.id.etName);
            final EditText etAge = (EditText) viewDialog.findViewById(R.id.etAge);
            final DatePicker dpBirthdate = (DatePicker) viewDialog.findViewById(R.id.dpBirthdate);
            AlertDialog.Builder myBuilder = new AlertDialog.Builder(people.this);

            myBuilder.setView(viewDialog);
            myBuilder.setTitle("Add person to list");

            myBuilder.setPositiveButton("Add", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String name = etName.getText().toString();
                    String age = etAge.getText().toString();
                    int dpBirthdateDay = dpBirthdate.getDayOfMonth();
                    int dpBirthdateMonth = dpBirthdate.getMonth() + 1;
                    int dpBirthdateYear = dpBirthdate.getYear();

                    String birthday = Integer.toString(dpBirthdateDay) + "/" + Integer.toString(dpBirthdateMonth) + "/" + Integer.toString(dpBirthdateYear);
                    person person = new person();
                    person.setName(name);
                    person.setAge(age);
                    person.setExtbirthday(birthday);
                    person.setBirthday(Integer.toString(dpBirthdateDay));
                    person.setBirthmonth(Integer.toString(dpBirthdateMonth));
                    person.setBirthyear(Integer.toString(dpBirthdateYear));

                    alPeople.add(person);
                    aaPeople.notifyDataSetChanged();
                    Toast.makeText(people.this, "Person Added", Toast.LENGTH_LONG).show();


                }
            });
            AlertDialog myDialog = myBuilder.create();
            myDialog.show();
        }
    });


    //this is code for list view item click
    int personPos = 0;
    lvPeople.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View viewDialog = inflater.inflate(R.layout.person_dialog, null);
            final TextView tvName = (TextView) viewDialog.findViewById(R.id.tvName);
            final TextView tvAge = (TextView) viewDialog.findViewById(R.id.tvAge);
            final TextView tvBirthdate = (TextView) viewDialog.findViewById(R.id.tvBirthdate);
            AlertDialog.Builder myBuilder = new AlertDialog.Builder(people.this);

            myBuilder.setView(viewDialog);
            myBuilder.setTitle("Person Info");

            int personPos = position;
            tvName.setText(alPeople.get(personPos).getName());
            tvAge.setText(alPeople.get(personPos).getAge());
            tvBirthdate.setText(alPeople.get(personPos).getExtbirthday());

            myBuilder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            AlertDialog myDialog = myBuilder.create();
            myDialog.show();
        }
    });
    btnDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View viewDialog = inflater.inflate(R.layout.delete_dialog, null);
            final EditText etIndex = (EditText) viewDialog.findViewById(R.id.etIndex);

            AlertDialog.Builder myBuilder = new AlertDialog.Builder(people.this);

            myBuilder.setView(viewDialog);
            myBuilder.setTitle("Delete Person");


            myBuilder.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    int index = Integer.parseInt(etIndex.getText().toString());
                    if (alPeople.size() == 0) {
                        Toast.makeText(people.this, "There is nothing to delete", Toast.LENGTH_LONG).show();
                    } else {
                        alPeople.remove(index - 1);

                        aaPeople.notifyDataSetChanged();
                    }

                }
            });
            myBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            AlertDialog myDialog = myBuilder.create();
            myDialog.show();
        }
    });
}}

2 个答案:

答案 0 :(得分:0)

创建一个新类,比如说 NewArray扩展ListView 并在此类中复制 ListView 的代码。

创建 NewArray 的实例,无论您想在哪里使用 ListView

答案 1 :(得分:0)

如果ArrayList中的对象类型实现了Activity接口,您可以通过IntentArrayList数据传递给Parcelable ArrayList - 见here

如果这不是一个选项,您可以根据原始ArrayList中每个对象的某种标识符生成String,也就是说 Supplier<T> supp2 = supp1.andThen(function); 标识符 - 请参阅here。在这种情况下,如果您需要在开始的活动中再次显示模型数据,则需要先使用标识符加载它。