Recycler view не прикрепляется после навигации - PullRequest
0 голосов
/ 19 мая 2018

Я занимаюсь разработкой этого приложения, в котором я использовал вид нижней навигации.В моем домашнем фрагменте я использовал два представления переработчика. Я собираю некоторые данные и изображения для отображения на главном экране.При запуске приложения изображения отображаются в обоих видах переработчика, но если я поворачиваю экран или перехожу к другому фрагменту, изображения исчезают из второго представления переработчика, в то время как в первом представлении переработчика все еще отображаются изображения.

ниже приведен код

  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) { 
 mFavSubCatDatabase = 
 FirebaseDatabase.getInstance().getReference().child("FavSubCat");
    mFavSubCatDatabase.keepSynced(true);
    mFavCatDatabase = 
 FirebaseDatabase.getInstance().getReference().child("FavCat");
    mFavCatDatabase.keepSynced(true);
    //    mLayoutManager = new LinearLayoutManager(getContext());
    RecyclerView.LayoutManager mLayoutManager = new 
 GridLayoutManager(getContext(), 3);
    mFavSubCatList = (RecyclerView) 
    view.findViewById(R.id.HomesubcatOpeningRecler);
    mFavSubCatList.setHasFixedSize(true);
    mFavSubCatList.setLayoutManager(mLayoutManager);
    LinearLayoutManager mLayoutManager2
            = new LinearLayoutManager(getContext(), 
     LinearLayoutManager.HORIZONTAL, false);
    mFavCatList = (RecyclerView) 
    view.findViewById(R.id.HomeCatRecyclerOpening);
    mFavCatList.setHasFixedSize(true);
    mFavCatList.setLayoutManager(mLayoutManager2);
    return view;
   }


@Override
public void onStart() {
    super.onStart();
    startListening();

  }


      public void startListening()
    {



    Query query = FirebaseDatabase.getInstance()
            .getReference()
            .child("FavCat")
            .limitToLast(50);
    FirebaseRecyclerOptions<HomeCatitems> options =
            new FirebaseRecyclerOptions.Builder<HomeCatitems>()
                    .setQuery(query, HomeCatitems.class)
                    .build();
    FirebaseRecyclerAdapter adapter = new 
    FirebaseRecyclerAdapter<HomeCatitems, CategoryViewHolder>(options) {
        @Override
        public CategoryViewHolder onCreateViewHolder(ViewGroup parent, int 
    viewType) {              
            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.home_cat_layout, parent, false);
            return new CategoryViewHolder(view);
        }
        @Override
        protected void onBindViewHolder(final CategoryViewHolder holder, int 
     position, final HomeCatitems model) {
            holder.setDisplayName(model.getName());
            holder.setUserImage(model.getImageUrl(), getContext());

        }
    };
    mFavCatList.setAdapter(adapter);
    adapter.startListening();






    Query query1 = FirebaseDatabase.getInstance()
            .getReference()
            .child("FavSubCat")
            .limitToLast(50);

    FirebaseRecyclerOptions<CategoryItems> options1 =
            new FirebaseRecyclerOptions.Builder<CategoryItems>()
                    .setQuery(query1, CategoryItems.class)
                    .build();



    FirebaseRecyclerAdapter adaptersubcat = new 
    FirebaseRecyclerAdapter<CategoryItems, SubCategoryViewHolder>(options1)  
    {
        @Override
        public SubCategoryViewHolder onCreateViewHolder(ViewGroup parent, 
    int viewType) {

            View view = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.home_subcat_items, parent, false);
            return new SubCategoryViewHolder(view);
        }

        @Override
        protected void onBindViewHolder(final SubCategoryViewHolder holder, 
     int position, final CategoryItems model) {

            holder.setDisplayName(model.getName());
            holder.setUserImage(model.getImageUrl(), getContext());


        }
    };
    mFavSubCatList.setAdapter(adaptersubcat);
    adaptersubcat.startListening();
    }

один из внутренних классов viewHolder указан ниже открытого статического класса SubCategoryViewHolder extends RecyclerView.ViewHolder {

    View mView;
    ImageView subcategoryImageView;
    TextView subcategoryName;

    public SubCategoryViewHolder(View itemView) {
        super(itemView);

        mView = itemView;

    }

    public void setDisplayName(String name){

        subcategoryName = (TextView) 
    mView.findViewById(R.id.home_subcat_name);
        subcategoryName.setText(name);


    }


    public void setUserImage(final String thumb_image, final Context ctx){

        subcategoryImageView = (ImageView) 
   mView.findViewById(R.id.home_subcat_image);
        Picasso.with(ctx).setIndicatorsEnabled(false);

    Picasso.with(ctx).load(thumb_image).networkPolicy(NetworkPolicy.OFFLINE)

    .placeholder(R.drawable.default_avatar).into(subcategoryImageView, new 
    Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {



 Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.default_avatar)
       .into(subcategoryImageView);

            }
        });

    }



}

Ответы [ 3 ]

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

Как я уже упоминал в своем комментарии, похоже, это связано либо с реализациями ViewHolder, либо с кэшированием Пикассо.Наиболее подозрительный бит вашего кода:

Picasso.with(ctx).load(thumb_image).networkPolicy(NetworkPolicy.OFFLINE);

Возможно, вы захотите удалить объявление сетевой политики, есть ли причина для использования этого обратного вызова при ошибке для загрузкиваш образ на первом месте?Picasso сделает это за вас автоматически (выборка из памяти / дискового кэша, если он недоступен из сети).Попробуйте удалить это и загрузить изображения, используя только:

Picasso.with(ctx).load(thumb_image).placeholder(R.drawable.default_avatar).into(subcategoryImageView);

РЕДАКТИРОВАТЬ: также, вот документы для NetworkPolicy на случай, если вам нужна дополнительная информация: https://square.github.io/picasso/2.x/picasso/com/squareup/picasso/NetworkPolicy.html.

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

После поиска много я обнаружил, что я использовал setHasFixedSize (true) с wrap_content представления переработчика.Я удалил setHasFixedSize (true), и теперь он отлично работает.

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

Попробуйте использовать метод onResume, чтобы снова установить изображение в изображение после поворота.Или просто используйте onSavedInstanceState и переназначьте изображение в viewview, как ответили на этот вопрос: ImageView не сохраняет изображение при повороте экрана

...