Recycler View показывает данные в портретной, но не в альбомной ориентации, даже если я установил их снова после изменения ориентации - PullRequest
0 голосов
/ 08 марта 2019
> I have used MVVM to backup my data when screen orientation changes,
> the data loads perfectly but when i set the data to the adapter class
> recylerview goes empty even when onbind and getItem count gets called.
first i thought my data not getting loaded but then i tracked the data loads and everything goes fine but recycler view shows no view inside it.



        **ConsumerListActivit.java**

    package com.conformiz.riderapp.Activities.ConsumersList;

    import androidx.appcompat.app.AppCompatActivity;
    import androidx.appcompat.widget.AppCompatEditText;
    import androidx.appcompat.widget.Toolbar;
    import androidx.lifecycle.Observer;
    import androidx.lifecycle.ViewModelProviders;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    import androidx.transition.Visibility;

    import android.app.ProgressDialog;
    import android.graphics.Color;
    import android.os.AsyncTask;
    import android.os.Build;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.View;


    import com.conformiz.riderapp.Adapters.CustomerListAdapter;
    import com.conformiz.riderapp.Model.CustomersList.CustomersListRootResponseData;
    import com.conformiz.riderapp.Model.CustomersList.CustomersListRootResponseDataProductList;
    import com.conformiz.riderapp.R;
    import com.conformiz.riderapp.Utilities.SharedPreferenceUtil;
    import com.facebook.shimmer.Shimmer;
    import com.facebook.shimmer.ShimmerFrameLayout;
    import com.google.android.material.snackbar.Snackbar;
    import com.google.gson.Gson;

    import java.util.ArrayList;
    import java.util.List;

    import android.widget.EditText;
    public class ConsumerListActivity extends AppCompatActivity {

        public static final String TAG  = "ConsumersListActivity";
        private RecyclerView rvCustomersList;
        private Toolbar consumersListToolbar;
        private ArrayList<CustomersListRootResponseData> customersListData = new ArrayList<CustomersListRootResponseData>();
        private CustomerListAdapter customerListAdapter;
        private ProgressDialog progressDialog;
        private EditText etSearchCustomers;
        private ShimmerFrameLayout customersListShimmer;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_consumer_list);
            setFrontEnd();
            final ConsumerListViewModel consumerListViewModel = ViewModelProviders.of(this).get(ConsumerListViewModel.class);
            consumerListViewModel.setUserId(String.valueOf(SharedPreferenceUtil.getInstance(this).getUserId()));
            consumerListViewModel.getCustomersList().observe(this, new Observer<ArrayList<CustomersListRootResponseData>>() {
                @Override
                public void onChanged(ArrayList<CustomersListRootResponseData> customersListRootResponseData) {
                    Log.d(TAG, "OnChaned: "+new Gson().toJson(customersListRootResponseData).toString());
                    if (customersListRootResponseData == null) {
                        Snackbar emptyData = Snackbar.make(findViewById(R.id.activity_consumer),
                                R.string.no_data_found_string, Snackbar.LENGTH_SHORT);
                        emptyData.show();

                    } else {
                        customersListData = customersListRootResponseData;
                        customerListAdapter.addDataToList(customersListData);
                    }
                }
            });
            consumerListViewModel.getLoadingStatus().observe(this, new Observer<Boolean>() {
                @Override
                public void onChanged(Boolean aBoolean) {
                    if(aBoolean == true){
                       // showProgress();
                        customersListShimmer.setVisibility(View.VISIBLE);
                        customersListShimmer.startShimmer();
                        rvCustomersList.setVisibility(View.GONE);
                    }
                    else{
                      //  hideProgress();
                        if(customersListShimmer.getVisibility() == View.VISIBLE) {
                            customersListShimmer.stopShimmer();
                            customersListShimmer.setVisibility(View.GONE);
                            rvCustomersList.setVisibility(View.VISIBLE);
                        }
                    }
                }
            });


        }
        private void setFrontEnd()
        {
            //Setting Shimmer Layout
             customersListShimmer = findViewById(R.id.customersListShimmer);

            //Setting Search Edit Text
             etSearchCustomers = findViewById(R.id.etSearchClient);
             etSearchCustomers.addTextChangedListener(new TextWatcher() {
                 @Override
                 public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                 }

                 @Override
                 public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                       customerListAdapter.getFilter().filter(charSequence);

                 }

                 @Override
                 public void afterTextChanged(Editable editable) {

                 }
             });

            //Setting tool bar
            consumersListToolbar = findViewById(R.id.topToolbar);
            consumersListToolbar.setTitle("Customers List");
            consumersListToolbar.setTitleTextColor(Color.WHITE);
            consumersListToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
            consumersListToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    onBackPressed();
                }
            });
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                consumersListToolbar.setElevation(10f);
            }

            //Setting Recycler View
            rvCustomersList = findViewById(R.id.consumerListRv);
            LinearLayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
            rvCustomersList.setLayoutManager(layoutManager);

            //Setting Adapter
            customerListAdapter = new CustomerListAdapter(customersListData);
            rvCustomersList.setAdapter(customerListAdapter);

            Log.d(TAG,"Initializing the front end");

        }

        private void showProgress(){
            progressDialog = new ProgressDialog(ConsumerListActivity.this);
            progressDialog.setMessage("Getting Data....");
            progressDialog.setCancelable(false);
            progressDialog.show();

        }
        private void hideProgress(){
            if(progressDialog != null){
                progressDialog.dismiss();
            }
            progressDialog = null;
        }



    }

    **ConsumerListAdapter.java**
    package com.conformiz.riderapp.Adapters;

    import android.content.Context;
    import android.opengl.Visibility;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Filter;
    import android.widget.Filterable;

    import com.conformiz.riderapp.Model.CustomersList.CustomersListRootResponseData;
    import com.conformiz.riderapp.Model.CustomersList.CustomersListRootResponseDataProductList;
    import com.conformiz.riderapp.R;
    import com.conformiz.riderapp.ViewHolders.CustomerListVH;
    import com.conformiz.riderapp.ViewHolders.ProductsVH;
    import com.conformiz.riderapp.ViewHolders.ProductsViewHolder;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.function.IntToLongFunction;

    import androidx.annotation.NonNull;
    import androidx.lifecycle.MutableLiveData;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;

    public class CustomerListAdapter extends RecyclerView.Adapter<CustomerListVH> implements Filterable {
        private List<CustomersListRootResponseData> customersListData = new ArrayList<>();
        private List<CustomersListRootResponseData> customersListDataFull;
        private RecyclerView customersProductsRv;

        Context context;

        public CustomerListAdapter(List<CustomersListRootResponseData> mList) {

            this.customersListData = mList;
            customersListDataFull = new ArrayList<>(this.customersListData);
        }

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

        @Override
        public void onBindViewHolder(@NonNull final CustomerListVH holder, final int position) {
            Log.d("onbinding", "HERE");
            final CustomersListRootResponseData customerData = customersListData.get(position);

            //Setting Child's Adapter Class for Customers Orders Product //
    //        ClientsProductsPerCountListAdapter clientsProductsPerCountListAdapter = new ClientsProductsPerCountListAdapter(customerData.getProductList(), position);
    //        holder.getRvCustomersProducts().setAdapter(clientsProductsPerCountListAdapter);
    //        LinearLayoutManager layoutManager = new LinearLayoutManager(context, RecyclerView.VERTICAL, false);
    //        holder.getRvCustomersProducts().setLayoutManager(layoutManager);
    //
            holder.getTvCustomerName().setText(customerData.getFullname());
            holder.getTvCustomerAddress().setText(customerData.getAddress().trim());
            holder.getTvCustomerPhone().setText(customerData.getCell_no_1());
            holder.getEditProductIV().setOnClickListener(new View.OnClickListener() {
                                                             @Override
                                                             public void onClick(View view) {
                                                                 if (holder.getRvCustomersProducts().getVisibility() == View.VISIBLE) {
                                                                     holder.getRvCustomersProducts().setVisibility(View.GONE);
                                                                 } else {
                                                                     holder.getRvCustomersProducts().setVisibility(View.VISIBLE);
                                                                 }

                                                             }
                                                         }
            );


        }

        @Override
        public int getItemCount() {
            return this.customersListData.size();
        }

        public void addDataToList(ArrayList<CustomersListRootResponseData> customersListData) {
            if (customersListData != null && customersListData.size() > 0) {
                this.customersListData.clear();
                this.customersListData.addAll(customersListData);
                this.notifyDataSetChanged();
            }
        }

        @Override
        public Filter getFilter() {
            return customersListFilter;
        }

        private Filter customersListFilter = new Filter() {
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                List<CustomersListRootResponseData> filteredList = new ArrayList<>();

                if (charSequence == null || charSequence.length() == 0) {
                    filteredList.addAll(customersListDataFull);

                } else {
                    String filterPattern = charSequence.toString().toLowerCase().trim();

                    for (CustomersListRootResponseData data : customersListDataFull) {
                        if (data.getFullname().toLowerCase().contains(filterPattern) || data.getAddress().toLowerCase().contains(filterPattern)) {
                            filteredList.add(data);
                        }
                    }
                }
                FilterResults filterResults = new FilterResults();
                filterResults.values = filteredList;
                return filterResults;
            }

            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                customersListData.clear();
                customersListData.addAll((List) filterResults.values);
                notifyDataSetChanged();
            }
        };

    }

Это row_assignment.xml, который я надуваю в oncreateViewholder внутри класса адаптера. Это макет, который не работал для загрузки в ландшафтном режиме.Но теперь я создал новый ресурс с альбомной ориентацией и скопировал тот же код из row_assignment.xml, и это сработало.Я не уверен, почему это не сработало, потому что по умолчанию Android подобрал бы простой row_assignment.xml, даже если row_assignment.xml (ландшафт) не присутствовал.

row_assignment.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/margin_2dp">

    <androidx.cardview.widget.CardView
        android:id="@+id/container"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">


        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:id="@+id/tv_customer_name"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginTop="16dp"
                android:layout_marginEnd="8dp"
                android:text="TextView"
                android:textStyle="bold"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
                app:layout_constraintEnd_toStartOf="@+id/tv_customer_phone"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView
                android:id="@+id/tv_customer_phone"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:layout_marginEnd="16dp"
                android:text="TextView"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
                android:textColor="@color/liteBlueColor"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView
                android:id="@+id/tv_customer_address"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginStart="8dp"
                android:layout_marginTop="8dp"
                android:layout_marginEnd="8dp"
                android:maxLines="1"
                android:text="TextView"
                android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.0"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tv_customer_name" />

            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/constraintLayout3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                app:layout_constraintBottom_toTopOf="@+id/rvCustomersProducts"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/tv_customer_address"
                >



                <ImageView
                    android:id="@+id/iv_payments"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/iv_product_edit"
                    app:layout_constraintTop_toTopOf="parent"
                    android:background="@drawable/ic_payment_true" />

                <ImageView
                    android:id="@+id/iv_product_edit"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp"
                    android:layout_marginEnd="16dp"
                    app:layout_constraintEnd_toStartOf="@+id/iv_payments"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/iv_not_delivered_tick"
                    app:layout_constraintTop_toTopOf="parent"
                    android:background="@drawable/ic_edit" />

                <ImageView
                    android:id="@+id/iv_not_delivered_tick"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp"
                    android:layout_marginEnd="16dp"
                    app:layout_constraintEnd_toStartOf="@+id/iv_product_edit"
                    app:layout_constraintHorizontal_bias="0.5"
                    app:layout_constraintStart_toEndOf="@+id/iv_delivered_tick"
                    app:layout_constraintTop_toTopOf="parent"
                    android:background="@drawable/ic_not_deliver"/>

                <ImageView
                    android:id="@+id/iv_delivered_tick"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp"
                    android:layout_marginEnd="16dp"
                    android:background="@drawable/ic_deliver"
                    app:layout_constraintEnd_toStartOf="@+id/iv_not_delivered_tick"
                    app:layout_constraintHorizontal_bias="0.07"
                    app:layout_constraintHorizontal_chainStyle="packed"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

            </androidx.constraintlayout.widget.ConstraintLayout>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/rvCustomersProducts"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginBottom="8dp"
                android:layout_marginTop="8dp"
                android:visibility="gone"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/constraintLayout3"/>

        </androidx.constraintlayout.widget.ConstraintLayout>



    </androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
...