Java 如何使用setOnItemClickListener将listview中列出的firebase id传递给另一个活动?
目前我有一个ListView,它显示存储在Firebase中的数据 我尝试发送每个存储对象的ID,但我的“putExtra”只发送可见数据,即名称(通过在pojo类中创建一个返回名称的toString方法,我确定这是可见数据) Pojo: 现在我将展示这两个函数 ListData从firebase收集数据,并使用arrayadapter将其存储在listview中Java 如何使用setOnItemClickListener将listview中列出的firebase id传递给另一个活动?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,目前我有一个ListView,它显示存储在Firebase中的数据 我尝试发送每个存储对象的ID,但我的“putExtra”只发送可见数据,即名称(通过在pojo类中创建一个返回名称的toString方法,我确定这是可见数据) Pojo: 现在我将展示这两个函数 ListData从firebase收集数据,并使用arrayadapter将其存储在listview中 private void listarDatos() { databaseReference.child("par
private void listarDatos() {
databaseReference.child("parcelas").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
listaParcelas.clear();
for(DataSnapshot objSnaptshot : dataSnapshot.getChildren()){
Parcela p = objSnaptshot.getValue(Parcela.class);
listaParcelas.add(p);
}
arrayAdapterParcela = new ArrayAdapter<Parcela>(listaParcelas.this, android.R.layout.simple_list_item_1,listaParcelas);
listvListaParcela.setAdapter(arrayAdapterParcela);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
listvListaParcela.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
Intent intentEditar = new Intent(listaParcelas.this,editarParcela.class);
intentEditar.putExtra("idParcelaModificable",listvListaParcela.getItemAtPosition(i).toString());
startActivity(intentEditar);
}
});
}
private void listarDatos(){
databaseReference.child(“parcelas”).addValueEventListener(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
listaParcelas.clear();
对于(DataSnapshot objSnaptshot:DataSnapshot.getChildren()){
Parcela p=objSnaptshot.getValue(Parcela.class);
添加(p);
}
arrayAdapterParcela=新的ArrayAdapter(listaParcelas.this,android.R.layout.simple\u list\u item\u 1,listaParcelas);
ListVlistParcela.setAdapter(arrayAdapterParcela);
}
@凌驾
已取消公共void(@NonNull DatabaseError){
}
});
ListVlistParcela.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图视图、int i、long l){
Intent intentEditar=新的Intent(listaParcelas.this,editarParcela.class);
intentEditar.putExtra(“IDParcelaModifiable”,ListVlistParcela.getItemAtPosition(i.toString());
星触觉(意向性);
}
});
}
在发送intentEditar.putExtra时,只发送数据名,并忘记它包含的所有存储但不可见的数据(我知道数据在那里,因为在调试器中可以观察到它)我终于成功了,我从arrayadapter中提取了对象 之后,我使用pojo中的get提取id,并将其发送到intent 在我的情况下,我可以发送整个对象,也可以只发送id,无论我喜欢哪个
listvListaParcela.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
Parcela DatosParcelaClick = arrayAdapterParcela.getItem(i);
String IdParcelaString = DatosParcelaClick.getIdParcela().toString();
Intent intentEditar = new Intent(listaParcelas.this,editarParcela.class);
//2 options
intentEditar.putExtra("IdParcelaClick",IdParcelaString);
intentEditar.putExtra("objetoParcelaClick",DatosParcelaClick);
startActivity(intentEditar);
}
});
}
listVlistParcela.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图视图、int i、long l){
Parcela DatosParcelaClick=arrayAdapterParcela.getItem(i);
字符串IdParcelaString=DatosParcelaClick.getIdParcela().toString();
Intent intentEditar=新的Intent(listaParcelas.this,editarParcela.class);
//2个选项
intentEditar.putExtra(“IdParcelaClick”,IdParcelaString);
intentEditar.putExtra(“objetoParcelaClick”,DatosParcelaClick);
星触觉(意向性);
}
});
}
您是否尝试在toString方法中添加更多字段?除此之外,您是否尝试过从for循环中创建适配器?我真的不想向toString添加更多信息,因为它将显示在布局中,这是我不想要的。对不起,我没有正确理解的第二个问题是,在for循环的每次迭代中,您都在创建ArrayAdapter类的新实例,这是不正确的。你可以退房。我认为这会有帮助。此外,除了在其他活动中你还期待什么?您只向其他活动发送了nombreParcela
。实际上,ArrayAdapter位于错误的位置。我已经将它们放在for之后,但是我仍然不知道如何准确地拯救数据,检查调试,我不确定它们是否正确显示,是否有任何方法可以使用toString并发送id,而不在布局中看到它?
listvListaParcela.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
Parcela DatosParcelaClick = arrayAdapterParcela.getItem(i);
String IdParcelaString = DatosParcelaClick.getIdParcela().toString();
Intent intentEditar = new Intent(listaParcelas.this,editarParcela.class);
//2 options
intentEditar.putExtra("IdParcelaClick",IdParcelaString);
intentEditar.putExtra("objetoParcelaClick",DatosParcelaClick);
startActivity(intentEditar);
}
});
}