0
我試圖在用戶單擊一個項目時獲取Firebase記錄的鍵名。它工作正常,但當用戶刪除一條記錄,然後點擊該記錄被刪除/下的另一條記錄時,我得到一個IndexOutOfBoundsException。獲取FirebaseRecyclerAdapter中的鍵名拋出IndexOutOfBoundsException
我不太明白爲什麼會出現這個問題。有人可以向我解釋爲什麼會發生這種情況,我應該怎麼做才能解決問題?這是我正在使用的代碼。試圖在視圖onClickListener內調用mFirebaseAdapter.getRef(position).getKey()
時發生錯誤。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
mFirebaseAdapter = new FirebaseRecyclerAdapter<Produto, MessageViewHolder>(
Produto.class,
R.layout.item_message,
MessageViewHolder.class,
mFirebaseDatabaseReference.child(PRODUTOS).orderByChild("descricao")) {
@Override
protected void populateViewHolder(final MessageViewHolder viewHolder,
final Produto produto, final int position) {
TextView messageView = viewHolder.viewDescricao;
String descricaoTemp = produto.getDescricao();
if (descricaoTemp != null && descricaoTemp.length() > 25)
descricaoTemp = descricaoTemp.substring(0, 25);
messageView.setText(descricaoTemp);
if (produto.getReservado())
messageView.setPaintFlags(messageView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
viewHolder.viewValor.setText(produto.getValor());
File file = getFileFromImageName(produto.getBase64());
if (file.exists())
viewHolder.viewImagem.setImageURI(Uri.fromFile(file));
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View view) {
keyName = mFirebaseAdapter.getRef(position).getKey();
Intent intent = new Intent(MainActivity.this, CadastrarNovoProduto.class);
intent.putExtra("key", keyName);
intent.putExtra("Descricao", produto.getDescricao());
intent.putExtra("Valor", produto.getValor());
intent.putExtra("base64", produto.getBase64());
intent.putExtra("urlImagem", produto.getUrlImagem());
intent.putExtra("currentUserEmail", mFirebaseUser.getEmail());
intent.putExtra("Reservado", produto.getReservado());
startActivityForResult(intent, RC_EDITAR_PRODUTO);
}
};
viewHolder.viewDescricao.setOnClickListener(listener);
viewHolder.viewValor.setOnClickListener(listener);
viewHolder.viewImagem.setOnClickListener(listener);
}
};
嘗試使用viewHolder.getAdapterPosition()而不是位置,並將firebaseAdapter放入onResume – Linxy
工作正常!謝謝@Linxy –