![](/img/trans.png)
[英]How to implement onClick in FirestoreRecyclerAdapter to open a new Fragment?
[英]Implementation onClick in FirestoreRecyclerAdapter to open a new Activity
在我的應用程序中,我有一個帶有 Firestore 數據庫元素的 recyclerView。 我想通過單擊 recyclerView 中的元素(位於片段內)將元素的數據傳遞給另一個活動。 我嘗試了幾種解決方案,但似乎都沒有奏效,我被困住了。 請幫我。
適配器 Class
public class InfoElementAdapter extends FirestoreRecyclerAdapter<InfoElement, InfoElementAdapter.InfoElementHolder> {
String urlImg;
public InfoElementAdapter(@NonNull FirestoreRecyclerOptions<InfoElement> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull InfoElementHolder holder, int position, @NonNull InfoElement model) {
holder.textViewNomeRest.setText(model.getNome());
holder.textViewDescrRest.setText(model.getDescrizione());
urlImg = model.getUrlImg();
Glide.with(holder.itemView.getContext()).load(urlImg).into(holder.imageView);
}
@NonNull
@Override
public InfoElementHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_single, parent, false );
return new InfoElementHolder(v) ;
}
class InfoElementHolder extends RecyclerView.ViewHolder {
TextView textViewNomeRest;
TextView textViewDescrRest;
ImageView imageView;
public InfoElementHolder(@NonNull View itemView) {
super(itemView);
textViewNomeRest = itemView.findViewById(R.id.txt_v_nome);
textViewDescrRest = itemView.findViewById(R.id.txt_v_descrizione);
imageView = itemView.findViewById(R.id.imageV);
}
}
}
帶有 recyclerView 的片段
public class RestaurantFragment extends Fragment {
private FirebaseFirestore db = FirebaseFirestore.getInstance();
private CollectionReference restaurantRef = db.collection("restaurant_db");
private InfoElementAdapter adapter;
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_restaurant, container, false);
setUpRecyclerView();
return view;
}
private void setUpRecyclerView() {
Query query = restaurantRef.orderBy("nome", Query.Direction.ASCENDING);
FirestoreRecyclerOptions<InfoElement> options = new FirestoreRecyclerOptions.Builder<InfoElement>()
.setQuery(query, InfoElement.class)
.build();
adapter = new InfoElementAdapter(options);
RecyclerView recyclerView = view.findViewById(R.id.firestore_list1);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(Tools.getGridSpanCount(getActivity()), StaggeredGridLayoutManager.VERTICAL));
recyclerView.addItemDecoration(new Tools.SpacingItemDecoration(Tools.getGridSpanCount(getActivity()), Tools.dpToPx(getActivity(), 4),true));
recyclerView.setAdapter(adapter);
}
@Override
public void onStart() {
super.onStart();
adapter.startListening();
}
@Override
public void onStop() {
super.onStop();
if (adapter != null) {
adapter.stopListening();
}
}
}
InfoElement Class
public class InfoElement {
private String nome;
private String descrizione;
private String urlImg;
public InfoElement() {
}
public InfoElement(String nome, String descrizione, String urlImg) {
this.nome = nome;
this.descrizione = descrizione;
this.urlImg = urlImg;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setDescrizione(String descrizione) {
this.descrizione = descrizione;
}
public String getUrlImg() {
return urlImg;
}
public void setUrlImg(String urlImg) {
this.urlImg = urlImg;
}
public String getNome() {
return nome;
}
public String getDescrizione() {
return descrizione;
}
}
您可以通過為onBindViewHolder
設置單擊偵聽器來更改itemView
,並使用 putExtra 添加您的數據putExtra
,並在目標活動中使用getIntent().getSerializableExtra
檢索它。
@Override
protected void onBindViewHolder(@NonNull InfoElementHolder holder, int position, @NonNull InfoElement model) {
holder.textViewNomeRest.setText(model.getNome());
holder.textViewDescrRest.setText(model.getDescrizione());
urlImg = model.getUrlImg();
Glide.with(holder.itemView.getContext()).load(urlImg).into(holder.imageView);
holder.itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent (v.getContext(), ActivityB.class);
intent.putExtra("MyData", myData);
startActivity(intent);
}
});
}
在目標活動中檢索數據
getIntent().getSerializableExtra("MyData");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.