Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 如何设置recyclerview中每个cardview的位置?_Android_Firebase - Fatal编程技术网

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

Android 如何设置recyclerview中每个cardview的位置?,android,firebase,Android,Firebase,我正在制作一个应用程序,它在Firebase中获取表的所有用户,并在cardwiew中显示他们,但我希望管理员出现在其他用户之前 对于这种区别,所有用户都保存到系统中,并带有一个名为type的属性,该属性表示他们是普通用户还是管理员 这是TelaChat.java文件: public class TelaChat extends AppCompatActivity { private RecyclerView recyclerView; private DatabaseRefe

我正在制作一个应用程序,它在
Firebase
中获取表的所有用户,并在
cardwiew
中显示他们,但我希望管理员出现在其他用户之前

对于这种区别,所有用户都保存到系统中,并带有一个名为
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);
}
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);
    }
}

我在网上找了一些教程,但没有一本指定我要做什么。有人能帮我吗?

尝试添加以下内容:orderByChild(“键入”)

或在此:

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

很抱歉,我现在无法测试它,希望它能正常工作。

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

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

     }
    }
private int position=0;
private List myList=new ArrayList();
for(int i=0;i

将此列表“myList”设置为recyclerview适配器后,请尝试按类型对数据进行排序。@AliAli我想是的,但我不知道具体如何进行排序。你能给我举个例子吗?请添加你的数据库结构并指出预期的结果。请回复@AlexMamoHi,@AlexMamo!这是一张显示我的数据库的照片:,如您所见,包含用户数据的表有一个加密的名称,属性“tipo”(type)是它所说的,如果它是“administrador”(管理员)或“usuário”(用户)。我想要的是,在将Cardview放入Recyclerview时,要放在管理员用户之前。@AlexMamo或多或少,我创建了一个名为“order”的属性,并将它显示在列表中的位置,然后用orderByChild(“order”)调用它。我就是这样设法解决的。好吧,它或多或少奏效了。这样做的目的是让管理员在列表中出现得更早,然后用户很快就会出现,但这样只会出现管理员。你能理解我吗?好的@PedroSilveira,但是上面的方法只改变顺序,不隐藏任何东西。
        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))

     }
    }