Recyclerview中的view.GONE仍然保留空间

时间:2017-06-22 16:42:46

标签: java android view android-recyclerview android-cardview

我在网上搜索并认为view.invisible和view.gone之间存在差异,vie.gone必须在不保留空间的情况下消失,但它不会发生在我身上,我怎么能修理它?请帮忙,看看这两张照片的链接。

Android模拟器上的结果图片:https://i.stack.imgur.com/AC1Xr.png

数据库:https://i.stack.imgur.com/Pwhno.png

@Override
protected void onStart() {
    super.onStart();

    final FirebaseRecyclerAdapter<MyReading, MyReadingViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter <MyReading, MyReadingViewHolder>
            (
            MyReading.class,
            R.layout.list_reading,
            MyReadingViewHolder.class,
            mQuery )

    {
        @Override
        protected void populateViewHolder(final MyReadingViewHolder viewHolder, MyReading model, int position) {

            final String wordNote_key = getRef(position).getKey();

            viewHolder.setWord(model.getWord());
            viewHolder.setNote(model.getNote());


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

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });

            viewHolder.nView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    Intent singleIntent = new Intent(WordNote.this, HandleWordNote.class);
                    singleIntent.putExtra("listWords", wordNote_key);
                    startActivity(singleIntent);

                }
            });
        }
    };

    listWN.setAdapter(firebaseRecyclerAdapter);
}

2 个答案:

答案 0 :(得分:0)

修改

好的,所以在看到更新的图像后,我看到了真正的问题。在查询中,添加约束以仅返回当前用户的uid的数据快照。问题在于,即使您的查看者视图为GONE,查看者本身仍将保持该位置,因为该位置存在模型对象。而不是攻击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) {

    }
});

答案 1 :(得分:0)

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

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