将动态项添加到listview

时间:2017-01-25 11:41:08

标签: android listview

我需要动态地将项目添加到listview。

现在我正在使用FAB(crearEntrenamintoActivity)打开一个新活动(crearEjercicioActivity),这里完成要添加到listview中的New项目的必要数据。

但是通过这种方式我需要在两个活动之间的所有时间传递parceableExtra。

还有其他更简单的方法吗?

编辑:

这里当我按FAB按钮时,我向新活动发送额外的“entrenamiento”,因为我需要将listview的所有项目保存到此对象中。

public void initFAB() {
        FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.fabCrearEntrenamiento);
        if (floatingActionButton != null) {
            floatingActionButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //lanzamos la actividad de crear ejercicio
                    entrenamiento.setUbicacion(etUbicacion.getText().toString());
                    entrenamiento.setHoraInicio(etHoraInicio.getText().toString());
                    Intent intent = new Intent(getApplicationContext(), CrearEjercicioActivity.class);
                    intent.putExtra("entrenamiento", entrenamiento);
                    startActivity(intent);
                }
            });
        }
    }

然后在“crearEjercicioActivity”中我有这个。这里当我按下保存按钮时,我在arrayList中添加新项目。

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_save:
                Entrenamiento entrenamiento = getIntent().getParcelableExtra("entrenamiento");
                Ejercicio ejercicio = new Ejercicio();
                EditText titulo = (EditText) findViewById(R.id.etTituloEjercicio);
                ejercicio.setTitulo(titulo.getText().toString());
                entrenamiento.getEjercicios().add(ejercicio);
                Intent intentEjercicio = new Intent(getApplicationContext(), CrearEntrenamientoActivity.class);
                intentEjercicio.putExtra("entrenamiento", entrenamiento);
                startActivity(intentEjercicio);
                return true;
            case R.id.action_home:
                Intent intent = new Intent(getApplicationContext(), DashBoardActivity.class);
                startActivity(intent);
            default:
                return super.onOptionsItemSelected(item);
        }
    }

最后我这样做了:

if (entrenamiento.getEjercicios().size() > 0) {
            ListView listViewEjercicios = (ListView) findViewById(R.id.listViewEjercicios);
            ArrayList<String> titulosEjercicios = new ArrayList<>();

            for (Ejercicio ejercicio : entrenamiento.getEjercicios()) {
                titulosEjercicios.add(ejercicio.getTitulo());
            }

            ArrayAdapter<String> listAdapter = new ArrayAdapter<>(this, R.layout.simple_row_ejercicio_layout, titulosEjercicios);
            if (listViewEjercicios != null) {
                listViewEjercicios.setAdapter(listAdapter);
            }
        }

2 个答案:

答案 0 :(得分:2)

我推荐一个经理类,这是一个单身人士。经理应该包括列表或地图等数据结构。在那里你可以保存你的对象。如果要添加新对象调用manager.add(yourobject)。此外,您可以像通知回调一样。使用经理数据的每个视图都必须实现您的回调。使用manager.registerCallback()在经理上注册观看次数。每当您修改管理员的数据时,例如add()remove(),您都必须致电notifyCallbacks()

如果您实施我的解决方案,那么您不必创建多个适配器对象。您正在处理一个保存在您的经理中的列表/地图对象。修改数据后,您只需拨打adapter.notifyDataSetChanged()

在此帖子上查看我的代码示例: Unable to refresh listview data within same fragments used under different tabs

答案 1 :(得分:0)

您只能使用一个Activity,然后为两个视图中的每个视图分配片段。然后,Activity可以保存对元素的引用,并通过调用它们上的公共方法来处理两个片段之间的通信(like described here at the bottom)。

如果你想坚持活动,那么意图可能是推荐的方法。