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