如何在recyclerview中设置每个cardview的位置?

时间:2019-01-18 17:38:23

标签: android firebase

我正在制作一个应用程序,该应用程序将Firebase中一个表的所有用户都显示在CardView中,但是我希望管理员出现在其他用户之前。

为此,所有用户都使用名为type的属性保存到系统,该属性表明他们是普通用户还是管理员。

这是TelaChat.java文件:

public class TelaChat extends AppCompatActivity {

    private RecyclerView recyclerView;
    private DatabaseReference databaseReference;
    private FirebaseRecyclerOptions<Usuario> options;
    private FirebaseRecyclerAdapter<Usuario, ChatAdapter> adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        setTitle("Tela de Chat");

        recyclerView = findViewById(R.id.cm_rv_membros);
        recyclerView.setHasFixedSize(true);
        databaseReference = FirebaseDatabase.getInstance().getReference().child("usuario");

        options = new FirebaseRecyclerOptions.Builder<Usuario>().setQuery(databaseReference, Usuario.class).build();

        adapter = new FirebaseRecyclerAdapter<Usuario, ChatAdapter>(options) {
            @Override
            protected void onBindViewHolder(ChatAdapter holder, int position, Usuario model) {
            Picasso.with(holder.ivFoto.getContext()).load(model.getImageURL()).centerCrop().resize(140, 140).transform(new ImageTrans_CircleTransform2()).into(holder.ivFoto);
            holder.tvNome.setText(model.getNome());
            holder.tvTipo.setText(model.getTipo());
        }

        @Override
        public ChatAdapter onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_card, parent, false);
            return new ChatAdapter(view);
        }
    };

    GridLayoutManager gridLayoutManager = new GridLayoutManager(getApplicationContext(), 1);
    recyclerView.setLayoutManager(gridLayoutManager);
    adapter.startListening();
    recyclerView.setAdapter(adapter);
}

这是ChatAdapter.java文件:

public class ChatAdapter extends RecyclerView.ViewHolder{

    public ImageView ivFoto;
    public TextView tvNome;
    public TextView tvTipo;

    public ChatAdapter(View itemView) {
        super(itemView);

        ivFoto = itemView.findViewById(R.id.cc_iv_foto);
        tvNome = itemView.findViewById(R.id.cc_tv_nome);
        tvTipo = itemView.findViewById(R.id.cc_tv_tipo);
    }
}

我已经在互联网上寻找了一些教程,但没有一个指定我想做什么。有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

Try to add this: orderByChild("type")

databaseReference = FirebaseDatabase.getInstance().getReference().child("usuario").orderByChild("type");

Or here:

options = new FirebaseRecyclerOptions.Builder<Usuario>().setQuery(databaseReference.orderByChild("type"), Usuario.class).build();

Sorry I can't test it right now, hope it works.

答案 1 :(得分:0)

我有一个想法可能会帮助您设置一个标志,例如,名为初始值0的position并创建一个新列表以对其进行排序并检查类型,如果管理员将他添加到具有position value并增加位置的列表中位置值,否则添加不带索引的值

        private int position = 0;
        private List<Users> myList = new ArrayList();

        for(int i = 0 ; i < usersList.size ; i++){

          if(userList.get(i).getType.equal("adminstrator")){

             myList.add(position,userList.get(i))
            position++;

    }else{

       myList.add(usetList.get(i))

     }
    }

将此列表“ myList”设置为recyclerview适配器后