我需要动态添加项目到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 回答
我推荐一个经理类,这是单身人士 . 经理应该包括列表或 Map 等数据结构 . 在那里你可以保存你的对象 . 如果要添加新对象,请调用
manager.add(yourobject)
. 另外,你可以像通知回调一样 . 使用经理数据的每个视图都必须实现您的回调 . 使用manager.registerCallback()
在管理器上注册视图 . 每当您修改管理器的数据时,如add()
或remove()
,您必须调用notifyCallbacks()
.如果您实施我的解决方案,那么您不必使用一个保存在您的经理中的列表/ Map 对象 . 修改数据后,您只需调用
adapter.notifyDataSetChanged()
.在这篇文章上查看我的代码示例:Unable to refresh listview data within same fragments used under different tabs
您可以只使用一个Activity,然后为两个视图中的每个视图分配片段 . 然后,Activity可以保存对元素的引用,并通过调用它们上的公共方法来处理两个片段之间的通信(like described here at the bottom) .
如果你想坚持活动,那么意图可能是推荐的方法 .