Android 带有gridlayoutmanager的FirebaseRecyclerAdapter
我让recyclerview接收来自firebase的数据,我想让上传的最后一个项目成为列表中的第一个项目。我使用GridLayoutManager,想显示一张带有文本的图片,所有这些都很好,但我想让它们像instagram一样有序,有人知道这样的事情吗 这是我的代码Android 带有gridlayoutmanager的FirebaseRecyclerAdapter,android,firebase,android-recyclerview,Android,Firebase,Android Recyclerview,我让recyclerview接收来自firebase的数据,我想让上传的最后一个项目成为列表中的第一个项目。我使用GridLayoutManager,想显示一张带有文本的图片,所有这些都很好,但我想让它们像instagram一样有序,有人知道这样的事情吗 这是我的代码 public class ItemsUser extends Fragment { private View mMainView; private RecyclerView mUsersList; private String
public class ItemsUser extends Fragment {
private View mMainView;
private RecyclerView mUsersList;
private String user_id;
private DatabaseReference mUserDatabase;
private FirebaseRecyclerAdapter<ItemRecycleview,UserRecycleView> firebaseRecyclerAdapter;
private DatabaseReference mDatabaseReference;
private FirebaseListAdapter<ItemRecycleview> firebaseListAdapter;
public ItemsUser() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mMainView = inflater.inflate(R.layout.fragment_items_user, container, false);
mUsersList = (RecyclerView) mMainView.findViewById(R.id.recyclerView_profile);
mUsersList.setHasFixedSize(true);
mUsersList.setLayoutManager(new GridLayoutManager(getActivity(),3));
ProfileUser activity = (ProfileUser) getActivity();
user_id = activity.getMyData();
mDatabaseReference = FirebaseDatabase.getInstance().getReference();
mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users_photos").child(user_id);
mUserDatabase.keepSynced(true);
return mMainView;
}
@Override
public void onStart() {
super.onStart();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ItemRecycleview, UserRecycleView>(
ItemRecycleview.class,
R.layout.recycleview_item,
UserRecycleView.class,
mUserDatabase
) {
@Override
protected void populateViewHolder(UserRecycleView viewHolder, ItemRecycleview model, int position) {
viewHolder.setImageName(model.getImageName());
viewHolder.setImageURL(model.getImageURL(),getContext());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String key = firebaseRecyclerAdapter.getRef(mUsersList.getChildLayoutPosition(v)).getKey();
Intent imageIntent = new Intent(getActivity(), ImageActivity.class);
imageIntent.putExtra("imageKey",key);
imageIntent.putExtra("user_id",user_id);
startActivity(imageIntent);
}
});
}
};
mUsersList.setAdapter(firebaseRecyclerAdapter);
}
public static class UserRecycleView extends RecyclerView.ViewHolder {
View mView;
public UserRecycleView(View itemView) {
super(itemView);
mView = itemView;
}
public void setImageName(String imageName){
TextView userNameView = (TextView) mView.findViewById(R.id.ImageNameTextView);
userNameView.setText(imageName);
}
public void setImageURL(final String imageURL,final Context ctx){
final ImageView userImageView = (ImageView) mView.findViewById(R.id.imageView);
Picasso.with(ctx).load(imageURL).networkPolicy(NetworkPolicy.OFFLINE).into(userImageView, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError() {
Picasso.with(ctx).load(imageURL).into(userImageView);
}
});
}
}
}您是否尝试过使用setReverseLayout()方法将第一个元素设置为列表中的最后一个元素
GridLayoutManager mLayoutManager = new GridLayoutManager(getActivity(),3);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mUsersList.setLayoutManager(mLayoutManager);
嘿,伙计们,我刚找到答案:D 您只需在firebaseRecyclerAdapter中添加此方法 这是:
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ItemRecycleview, UserRecycleView>(
ItemRecycleview.class,
R.layout.recycleview_item,
UserRecycleView.class,
mUserDatabase
) {
@Override
public ItemRecycleview getItem(int position) {
return super.getItem(getItemCount() - 1 - position);
}
@Override
protected void populateViewHolder(UserRecycleView viewHolder, ItemRecycleview model, int position) {
viewHolder.setImageName(model.getImageName());
viewHolder.setImageURL(model.getImageURL(),getContext());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String key = firebaseRecyclerAdapter.getRef(mUsersList.getChildLayoutPosition(v)).getKey();
Intent imageIntent = new Intent(getActivity(), ImageActivity.class);
imageIntent.putExtra("imageKey",key);
imageIntent.putExtra("user_id",user_id);
startActivity(imageIntent);
}
});
}
};
firebaseRecyclerAdapter=新的firebaseRecyclerAdapter(
ItemRecycleview.class,
R.layout.recycleview_项目,
UserRecycleView.class,
博物馆数据库
) {
@凌驾
公共项回收查看getItem(内部位置){
返回super.getItem(getItemCount()-1-位置);
}
@凌驾
受保护的void populateViewHolder(UserRecycleView视图持有人、ItemRecycleview模型、int位置){
setImageName(model.getImageName());
setImageURL(model.getImageURL(),getContext());
viewHolder.mView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
String key=firebaseRecyclerAdapter.getRef(muserList.getChildLayoutPosition(v)).getKey();
Intent-imageIntent=新的意图(getActivity(),ImageActivity.class);
imageIntent.putExtra(“imageKey”,key);
imageIntent.putExtra(“用户id”,用户id);
星触觉(imageIntent);
}
});
}
};
这样就可以完成了所以你要获取一个数组,该数组将被设置到列表适配器?是的,没错,我希望上传的最后一个项目是第一个位置。你能理解我吗!您的代码是否有一个数组循环,其中所有数据都显示在列表视图中?如果是,你能把它贴在这里吗?不,这是所有的代码逻辑很简单。。只需在显示结果时反转数组即可。也就是说,从下到上显示数组,for循环等于数组的大小,每次执行时—而不是++。明白了吗?是的,我试过了,但它显示了错误:GridLayoutManager不支持从末尾堆栈。考虑使用反向布局应该是一个评论
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<ItemRecycleview, UserRecycleView>(
ItemRecycleview.class,
R.layout.recycleview_item,
UserRecycleView.class,
mUserDatabase
) {
@Override
public ItemRecycleview getItem(int position) {
return super.getItem(getItemCount() - 1 - position);
}
@Override
protected void populateViewHolder(UserRecycleView viewHolder, ItemRecycleview model, int position) {
viewHolder.setImageName(model.getImageName());
viewHolder.setImageURL(model.getImageURL(),getContext());
viewHolder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String key = firebaseRecyclerAdapter.getRef(mUsersList.getChildLayoutPosition(v)).getKey();
Intent imageIntent = new Intent(getActivity(), ImageActivity.class);
imageIntent.putExtra("imageKey",key);
imageIntent.putExtra("user_id",user_id);
startActivity(imageIntent);
}
});
}
};