使用gridlayoutmanager

时间:2018-04-09 14:33:45

标签: android firebase recycler-adapter

我有来自firebase的recyclerview接收数据,我想将最后一项上传到列表中的第一项。我正在使用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;
}

}

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用setReverseLayout()方法将第一个元素放在列表中的最后一个

GridLayoutManager mLayoutManager = new GridLayoutManager(getActivity(),3);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mUsersList.setLayoutManager(mLayoutManager);

答案 1 :(得分:0)

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

        }


    };

这将使它完成