繁体   English   中英

在FirestoreRecyclerAdapter中实现onClick打开一个新的Activity

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM