无法将新对象添加到Listview

问题描述 投票:-1回答:1

我正在构建一个Android应用程序,该程序在Mainactivity中显示对象列表,您应该能够从其他活动向该列表添加新对象。我的mainActivity的代码如下:

public class MainActivity extends AppCompatActivity {

    private ListView listview;
    private ArrayAdapter arrayAdapter;
    final ArrayList<Schulden> arrayList = new ArrayList<>();

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

        listview = (ListView)findViewById(R.id.schulden);
        final ArrayList<Schulden> arrayList = new ArrayList<>();
        Schulden s1 = new Schulden("Simone", "11/02/2020", 22.50);
        Schulden s2 = new Schulden("Robbe", "11/02/2020", 5.00);
        Schulden s3 = new Schulden("Gilleke", "11/02/2020", 20.50);
        Schulden s4 = new Schulden("Ruben", "11/02/2020", 69.50);
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);

        arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, arrayList);
        listview.setAdapter(arrayAdapter);

        listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Schulden item = arrayList.get(position);
                Intent i = new Intent(MainActivity.this, ShowItem.class);
                i.putExtra("schuld", item);
                startActivity(i);
            }
        });

        Button button1 = (Button) findViewById(R.id.AddButton);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent i = new Intent(MainActivity.this, AddItem.class);
                i.putExtra("schulden", arrayList);
                startActivityForResult(i, 1);}
        });

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == 1) {
            if(resultCode == RESULT_OK) {
                Schulden result = (Schulden) getIntent().getSerializableExtra("nieuweSchuld");
                arrayList.add(result);

                arrayAdapter.notifyDataSetChanged();
                listview.invalidateViews();
                listview.refreshDrawableState();
            } else if(resultCode == RESULT_CANCELED) {
                Toast.makeText(MainActivity.this, "Something went wrong",Toast.LENGTH_SHORT ).show();
            }
        }
    }
}

其他活动的代码如下:

public class AddItem extends AppCompatActivity {

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


        Intent i = getIntent();
        final ArrayList<Schulden> arrayList = (ArrayList<Schulden>) i.getSerializableExtra("schulden");

        Button button1 = (Button) findViewById(R.id.Donebutton);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                TextView name = (TextView) findViewById(R.id.nameText);
                DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1);
                TextView bedrag = (TextView) findViewById(R.id.bedragText);
                String date = String.valueOf(datePicker.getDayOfMonth()) + "/" + String.valueOf(datePicker.getMonth()) + "/" + String.valueOf(datePicker.getYear());
                Schulden s1 = new Schulden(name.getText().toString(), date, Double.parseDouble(bedrag.getText().toString()));
                //arrayList.add(s1);

                Intent i = new Intent(AddItem.this, MainActivity.class);
                //i.putExtra("nieuweSchulden", arrayList);
                i.putExtra("nieuweSchuld", s1);
                setResult(RESULT_OK, i);
                finish();
            }
        });
    }
}

我还想知道,将列表作为一个额外的对象传递并在第二个活动中将对象添加到列表中是个好主意,还是最好返回新对象并将其添加到列表中,这是一个更好的主意。主要活动。

java android listview android-listview
1个回答
0
投票

您缺少更改列表的代码行:

// Make your list a field
final ArrayList<Schulden> arrayList = new ArrayList<>();


@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode == 1) {
        if(resultCode == RESULT_OK) {
            // HERE YOU NEED TO UPDATE YOUR DATA
            ArrayList<Schudlen> resultList = getParceleableExtra("nieuweSchulden");
            arrayList.addAll(resultList);
            // --<
            arrayAdapter.notifyDataSetChanged();
        } else if(resultCode == RESULT_CANCELED) {
            Toast.makeText(MainActivity.this, "Something went wrong",Toast.LENGTH_SHORT ).show();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.