Огромный разрыв между картами реселлера ViewView - PullRequest
0 голосов
/ 05 мая 2018

У меня есть recylerView для отображения изображений, извлеченных из облака базы данных. Однако между некоторыми элементами существует большой разрыв, и эти пробелы возникают после того, как я начинаю прокрутку, перед прокруткой все помещается идеально, я прочитал несколько статей, однако не оказался верным в моем случае. Код для моей MainActivity приведен ниже

  RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());


    Query query = firebaseDatabase.getReference().child("Products").child(Uid).orderByKey();

    FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<MainConstructor>().setQuery(query, MainConstructor.class).build();

    mFirebaseAdapter = new FirebaseRecyclerAdapter<MainConstructor, ShowDataViewHolder>(options) {


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

        @Override
        protected void onBindViewHolder(@NonNull ShowDataViewHolder holder, int position, @NonNull MainConstructor model) {
            holder.setImg(getApplicationContext(),model.getImageUrl());
            holder.setImageText(model.getImageUrl());
            holder.setCode(model.getProductCode());
            progressDialog.dismiss();

        }
    };
    recyclerView.setAdapter(mFirebaseAdapter);
}


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

    mFirebaseAdapter.startListening();
    recyclerView.setAdapter(mFirebaseAdapter);
}

@Override
protected void onStop() {
    super.onStop();
    mFirebaseAdapter.stopListening();
}

Код для класса ViewHolder указан как

public class ShowDataViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    ImageView img;
    TextView imageText, codeText;


    public ShowDataViewHolder(final View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
    }

    private void setImg(Context ctx, String img1) {
        img = (ImageView) itemView.findViewById(R.id.List_ImageView);
        Picasso.with(ctx).load(img1).placeholder(R.drawable.notification).into(img);
        // progressDialog.dismiss();
    }

    private void setImageText(String text){
        imageText = (TextView)itemView.findViewById(R.id.textView);
        imageText.setText(text);
    }

    private void setCode(String code){
        codeText = (TextView)itemView.findViewById(R.id.Code);
        codeText.setText(code);
    }

Здесь отчетливо видны большие нежелательные пробелы:

enter image description here

Код макета list_view задается как:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_margin="2dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/List_ImageView"
            android:padding="2dp"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/textView"
            android:visibility="invisible"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/Code"
            android:visibility="invisible"/>

    </LinearLayout>


</android.support.v7.widget.CardView>

Я где-то читал, что эта проблема возникает из-за того, что recyclerView постоянно обновляет элементы, поэтому, чтобы исправить, нам нужен класс ViewHolder, однако у меня есть viewHolder в моем случае, тогда эта проблема также существует, Может кто-нибудь помочь мне с решением, а также с точной проблемой, почему это происходит? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Ваш код идеален, просто удалите родительский узел RelativeLayout, который на самом деле не нужен. Это создает проблему с match_parent высота.

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_margin="2dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/List_ImageView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="2dp" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="invisible" />

        <TextView
            android:id="@+id/Code"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="invisible" />

    </LinearLayout>
</android.support.v7.widget.CardView>
0 голосов
/ 05 мая 2018

Изменить это:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

к этому:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
...