Android RecyclerView将信息传递给活动
我有一个recyclerview和firebase的应用程序 在我的活动中,我可以选择显示firebase数据库和存储器中的图像。我可以选择显示所有图像,也可以选择显示特定日期的图像 如果要显示所有图像,请使用以下代码:Android RecyclerView将信息传递给活动,android,android-recyclerview,Android,Android Recyclerview,我有一个recyclerview和firebase的应用程序 在我的活动中,我可以选择显示firebase数据库和存储器中的图像。我可以选择显示所有图像,也可以选择显示特定日期的图像 如果要显示所有图像,请使用以下代码: mDatabaseRef = FirebaseDatabase.getInstance().getReference(); 如果要显示特定日期的图像,请将子对象命名为图像存储在数据库中的日期,如下所示: mDatabaseRef = FirebaseDatabase.getI
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(位置);我希望这对你有帮助谢谢!!请将它标记为正确答案,它也将帮助其他人