android - FirebaseRecyclerAdapter 与 gridlayoutmanager

标签 android firebase android-recyclerview

我有 recyclerview 从 firebase 接收数据,我想让上传的最后一个项目成为列表中的第一个项目。我正在使用 GridLayoutManager 并想要显示带有文本的图片,所有这些工作正常,但我想像 Instagram 一样按顺序排列它们,有人知道类似的东西吗?

这是我的代码

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);
            }
        });

    }
}

}

这是 ItemRecyclerview:

public class ItemRecycleview {

public String imageName;
public String imageURL;

public ItemRecycleview(){

}

public ItemRecycleview(String imageName, String imageURL) {
    this.imageName = imageName;
    this.imageURL = imageURL;
}

public String getImageName() {
    return imageName;
}

public void setImageName(String imageName) {
    this.imageName = imageName;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

}

最佳答案

嘿伙计们,我刚刚找到了答案: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);
                }
            });

        }


    };

这样就完成了

关于android - FirebaseRecyclerAdapter 与 gridlayoutmanager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49735483/

相关文章:

swift - 检查 String 是否包含在 NSDictionary 中

android - Phonegap 3.0 构建缓慢

java - 查询 Firebase DatabaseReference 的习惯用法是什么?

android - MVVM & 绑定(bind) & 上下文

swift - Firebase 身份验证电话号码

android - ItemTouchHelper 和 SwipeRefreshLayout (RecyclerView)

java - 如何在android中使用recyclerView传递id而不是位置

android - 如何通过工具:listitem?使用androidx.recyclerview.widget.RecyclerView

android - Google Tango Leibniz API 中的彩色图像

android - 有没有办法改变 cordova-plugin-dialogs 上 Android 按钮的间距?