Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有gridlayoutmanager的FirebaseRecyclerAdapter_Android_Firebase_Android Recyclerview - Fatal编程技术网

Android 带有gridlayoutmanager的FirebaseRecyclerAdapter

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

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

    }
}

}

您是否尝试过使用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);
                }
            });

        }


    };