Android RecyclerView将信息传递给活动

Android RecyclerView将信息传递给活动,android,android-recyclerview,Android,Android Recyclerview,我有一个recyclerview和firebase的应用程序 在我的活动中,我可以选择显示firebase数据库和存储器中的图像。我可以选择显示所有图像,也可以选择显示特定日期的图像 如果要显示所有图像,请使用以下代码: mDatabaseRef = FirebaseDatabase.getInstance().getReference(); 如果要显示特定日期的图像,请将子对象命名为图像存储在数据库中的日期,如下所示: mDatabaseRef = FirebaseDatabase.getI

我有一个recyclerview和firebase的应用程序

在我的活动中,我可以选择显示firebase数据库和存储器中的图像。我可以选择显示所有图像,也可以选择显示特定日期的图像

如果要显示所有图像,请使用以下代码:

mDatabaseRef = FirebaseDatabase.getInstance().getReference();
如果要显示特定日期的图像,请将子对象命名为图像存储在数据库中的日期,如下所示:

mDatabaseRef = FirebaseDatabase.getInstance().getReference().child("2018-03.01");
现在,我想根据我在我的recyclerview中单击的日期,将此动态化,孩子需要更改为该字符串/日期

因此,如果我单击日期2013-03-01,我希望将此“字符串”传递给我打算打开的活动

我的用户界面当前显示图像存储在firebase中的日期,例如:

2018-02-27

2018-02-28

2018-03-01

因此,当我按下例如2018-02-27的按钮时,我想将此日期传递给我的活动,并将其用作firebase中孩子的名字

这是我的适配器:

@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
    // Upload is my Upload class with constructor, setter, and getter.
    // mUploads is my List


    Upload dateId= mUploads.get(position);

    // The String "dateNameId" gets all the dates,
    // 2018-02-27    2018-02-28    2018-03-01

    String dateNameId = dateId.getId();

    holder.textViewName.setText(dateNameId);


}
下面是活动中的代码,它实际设置了我们在适配器中检索的Id:

mDatabaseRef.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {

                Upload upload = postSnapshot.getValue(Upload.class);

                //The setId that takes the Key in firebase which is the date
                upload.setId(postSnapshot.getKey());

                mUploads.add(upload);

            }

我不知道如何获取我在我的recyclerview中单击的日期,请在活动类中添加此类`

class RecyclerTouchListener implements RecyclerView.OnItemTouchListener{
    private ClickListener clicklistener;
    private GestureDetector gestureDetector;
    public RecyclerTouchListener (Context context, final RecyclerView recycleView, final ClickListener clicklistener){
        this.clicklistener=clicklistener;
        gestureDetector=new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
            @Override
            public void onLongPress(MotionEvent e) {
                View child=recycleView.findChildViewUnder(e.getX(),e.getY());
                if(child!=null && clicklistener!=null){
                    clicklistener.onLongClick(child,recycleView.getChildAdapterPosition(child));
                }
            }
        });
    }
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        View child=rv.findChildViewUnder(e.getX(),e.getY());
        if(child!=null && clicklistener!=null && gestureDetector.onTouchEvent(e)){
            clicklistener.onClick(child,rv.getChildAdapterPosition(child));
        }
        return false;
    }
    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {}
    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
}
为click listener方法创建一个接口`

public static interface ClickListener{
    public void onClick (View view, int position);
    public void onLongClick (View view, int position);
}`
实现Recyclerview Onclicklistener

recyclerView.addOnItemTouchListener(new RecyclerTouchListener(this, recyclerView, new ClickListener() {
            @Override
            public void onClick (View view, final int position) {
                Toast.makeText(Activity.this, "press on position :" + position, Toast.LENGTH_LONG).show();
                //do something
            }
            @Override
            public void onLongClick (View view, int position) {
                Toast.makeText(Activity.this, "Long press on position :" position, Toast.LENGTH_LONG).show();
       //do something
            }
        }));
最后,您将获得适配器位置,在onclick事件中,在同一活动中使用该位置从Arraylist获取元素,在适配器和活动之间传递数据没有开销。

我解决了这个问题

在onItemClick上,我可以使用position和getId方法来获取所单击适配器的id。因为我的身份证就是解决我问题的日期

@Override
public void onItemClick(int position) {
    Upload selectedItem = mUploads.get(position);
    String selectedId = selectedItem.getId();
    Intent intent = new Intent(this , ImagesActivity.class);
    intent.putExtra("selectedId", selectedId);

    startActivity(intent);
}

我的活动中已经有onclicklistener,我可以获得第一项的位置0,第二项的位置1,依此类推。。。但是如何获取位置0中TEXTVIEW的文本,例如..我希望您正在将数据从活动传递到适配器,如果它是Arraylist,您可以使用位置访问Arraylist元素Arraylist modelList=new Arraylist();在onclickListener模型中,Model=modelList.get(位置);我希望这对你有帮助谢谢!!请将它标记为正确答案,它也将帮助其他人