Java view.GONE in Recyclerview仍保留空间

Java view.GONE in Recyclerview仍保留空间,java,android,view,android-recyclerview,android-cardview,Java,Android,View,Android Recyclerview,Android Cardview,我在网上搜索,发现view.invisible和view.gone之间有区别,vie.gone必须消失而不保留空间,但这不会发生在我身上,我如何修复它?请帮助,查看这两张图片的链接 Android Emulator上的结果图片: 数据库: @覆盖 受保护的void onStart(){ super.onStart(); 最终FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter ( MyReading.c

我在网上搜索,发现view.invisible和view.gone之间有区别,vie.gone必须消失而不保留空间,但这不会发生在我身上,我如何修复它?请帮助,查看这两张图片的链接

Android Emulator上的结果图片:

数据库:

@覆盖
受保护的void onStart(){
super.onStart();
最终FirebaseRecyclerAdapter FirebaseRecyclerAdapter=新的FirebaseRecyclerAdapter
(
MyReading.class,
R.layout.list_读数,
MyReadingViewHolder.class,
(穆盖里)
{
@凌驾
受保护的void populateViewHolder(最终MyReadingViewHolder视图持有人,MyReading模型,int位置){
最后一个字符串wordNote_key=getRef(position).getKey();
setWord(model.getWord());
setNote(model.getNote());
mDatabase.child(wordNote_key).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
String currentUid=(String)dataSnapshot.child(“uid”).getValue();
如果(firebaseauth.getCurrentUser().getUid().equals(currentUid)){
viewHolder.nView.setVisibility(View.VISIBLE);
}
其他的
{
viewHolder.nView.setVisibility(View.GONE);
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
viewHolder.nView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent singleIntent=newintent(WordNote.this,HandleWordNote.class);
singleIntent.putExtra(“listWords”,wordNote_键);
星触觉(单意图);
}
});
}
};
setAdapter(firebaseRecyclerAdapter);
}
编辑 好的,在看到更新后的图像后,我看到了真正的问题。在查询中,添加约束以仅返回具有当前用户uid的数据快照。问题是,即使您的viewholder的视图已消失,viewholder本身仍将保持该位置,因为该位置有一个模型对象。与其砍掉
FirebaseRecyclerAdapter
,不如使用传入的
Query
对象过滤掉列表中不需要的数据


您是否已尝试将更改通知适配器?仅仅因为您修改了子视图,并不意味着适配器会自动将viewHolder调整为适当的大小

mDatabase.child(wordNote_key).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        String currentUid = (String) dataSnapshot.child("uid").getValue();

        if(firebaseauth.getCurrentUser().getUid().equals(currentUid)){

          viewHolder.nView.setVisibility(View.VISIBLE);
        }
        else
        {
            viewHolder.nView.setVisibility(View.GONE);
        }
        //Notify the adapter the viewholder at this position changed.
        notifiyItemChanged(position);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

有一种解决方法,可以将viewHolder视图的高度设置为零

val layoutParamter = holder.mView.layoutParams
layoutParamter.height = 0
holder.mView.layoutParams = layoutParamter

请不要发布代码的图片(您可以编辑问题并复制粘贴代码),图片似乎是相同的。您是否试图完全删除ViewHolder,或者只是修改它,使其中的视图消失?@PabloBaxter Hi,我不想完全删除它,因为在这个项目中,当两个用户在同一个“区域”中工作时,我会遇到这个问题,所以我必须通过一个查询来分离他们的作业,事实上,正如你在顶部看到的“mQuery”,看,我从数据库中获取数据,这就是(String currentUid=(String)dataSnapshot.child(“uid”).getValue();)因此,我可以说,如果你是另一个用户,你不能观看另一个用户的工作,但有一个背景的东西不会随着视图消失;我在这个问题上更新了图片的链接,它不起作用,没有任何变化,我真的不明白问题出在哪里。。我听说有人在使用布局参数,查询如下:mQuery=mDatabase.orderByChild(“book”).equalTo(bookYouAreIn);我使用Firebase作为数据库,通过使用此查询,如果我单击另一本书,它会打开,然后书会单击,你知道我的意思吗?然后,我过滤用户ID以选择隐藏的内容。您可以发布一个您试图查询的数据结构的示例吗?我发布了问题中的数据库链接,请检查:您是否尝试过
mDatabase.orderByChild(“book”).equalTo(bookYouAreIn”).equalTo(“uid”,firebaseauth.getCurrentUser().getUid())
作为您的mQuery参数?从外观上看,您可以使用用户的uid对数据和书籍进行注释,因此限制只返回那些有用户的数据和书籍似乎是答案。
val layoutParamter = holder.mView.layoutParams
layoutParamter.height = 0
holder.mView.layoutParams = layoutParamter