使CardView可单击以加载具有相同firebase数据的活动

时间:2018-04-12 17:57:54

标签: firebase android-recyclerview cardview

我正面临一个小问题,弄清楚如下 - 我的MainActivity中有一个RecyclerView,RecyclerView里面有CardView。 数据显示在MinActivity页面上,因为RecyclerView就在其中。

现在,我希望在单击CardView后弹出一个新活动。 新活动将使用与CardView相同的数据。 如果重要的话,我会使用Firebase存储。

示例 - 我的CardView 1有一个名字,年龄和国家 - 杰克,19岁,英国。 另一个活动将从Firebase获取与CardView 1完全相同的收集数据,并将其实施到新活动中。

我希望我解释得很好..

(我使用吸气剂和制定者)

到目前为止我的代码(仅限所需部分) -

MainActivity

list_post = new ArrayList<>();
list_header = new ArrayList<>();

postsAdapter = new PostsAdapter(list_post);
headerAdapter = new HeaderAdapter(list_header);


headerRecycler = (RecyclerView) findViewById(R.id.headerRecycler);
headerRecycler.setAdapter(headerAdapter);
headerRecycler.setLayoutManager(new LinearLayoutManager(this));



firebaseFirestore = FirebaseFirestore.getInstance();
firebaseFirestore.collection("FeaturedPosts").limit(1).addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(QuerySnapshot queryDocumentSnapshotss, FirebaseFirestoreException ee) {

        for (DocumentChange doc2: queryDocumentSnapshotss.getDocumentChanges()) {
            if (doc2.getType() == DocumentChange.Type.ADDED) {
                ListForHeader listForHeader = doc2.getDocument().toObject(ListForHeader.class);
                list_header.add(listForHeader);
                headerAdapter.notifyDataSetChanged();
            }
        }
    }
});

RecyclerAdapter

public class HeaderAdapter  extends RecyclerView.Adapter<HeaderAdapter.ViewHolder2> {


public List<ListForHeader> list_header;

public Context contextt;

public HeaderAdapter (List<ListForHeader> list_header) {

    this.list_header = list_header;

}


@NonNull
@Override
public HeaderAdapter.ViewHolder2 onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.featured_activity, parent, false);
    contextt = parent.getContext();

    return new HeaderAdapter.ViewHolder2(view);
}

@Override
public void onBindViewHolder(@NonNull HeaderAdapter.ViewHolder2 holder, int position) {

    String header_data2 = list_header.get(position).getHeader2();
    holder.setHeaderText2(header_data2);

    String date_data2 = list_header.get(position).getDate2();
    holder.setDateText2(date_data2);

    String image_data2 = list_header.get(position).getImage_url2();
    holder.setIntroIMG2(image_data2);

}

@Override
public int getItemCount() {
    return list_header.size();
}

public class ViewHolder2 extends RecyclerView.ViewHolder {
    private View mView;

    private ImageView introIMG2;
    private TextView headerText2;
    private TextView dateText2;


    public ViewHolder2(View itemView) {
        super(itemView);
        mView = itemView;
    }

    public void setHeaderText2(String headText2) {

        headerText2 = mView.findViewById(R.id.introHeader2);
        headerText2.setText(headText2);

    }

    public void setDateText2(String tarihText2) {

        dateText2 = mView.findViewById(R.id.introDate2);
        dateText2.setText(tarihText2);

    }

    public void setIntroIMG2 (String downloadUri) {

        introIMG2 = (ImageView) mView.findViewById(R.id.introImage2);
        Glide.with(contextt).load(downloadUri).into(introIMG2);
    }
}

}

1 个答案:

答案 0 :(得分:0)

据我所知,它的问题很简单。您可以将cardview Id添加到viewHolder并在bindview中设置onlclicklister,然后单击Start活动并在Intent中传递当前数据。如果有其它因素阻止您发送数据或点击cardview,请告诉我。 额外:您可能需要设置cardview clickable true。

这是一个例子。

   class DemoViewHolder extends RecyclerView.ViewHolder implements 
   View.OnClickListener {   

    @BindView(R.id.card)
    CardView cardView;


    public DemoViewHolder(View itemView) {
        super(itemView);
        ButterKnife.bind(this, itemView);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.card:
                doSomethingOn(mList.get(getAdapterPosition()))
                break;
        }
    }

  public class BookingAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context mContext;
ArrayList<Booking> mList;
public BookingAdapter(Context context, ArrayList<Booking> list) {
    mContext = context;
    mList = list;
    this.cancelBookingListener = cancelBookingListener;
}