Android - notifyDataSetChanged не вызывается после OnClickListener - PullRequest
0 голосов
/ 13 октября 2018

Мне нужно обновить Viewpager, который находится внутри ArrayAdapter.Когда пользователь нажимает кнопку, список, передаваемый в Viewpager, обновляется и вызывается notifyDataSetChanged.

Но ничего не происходит.Как это можно сделать, пожалуйста?Прошло 2 дня, я пробую разные вещи.Пожалуйста, помогите мне.Благодарю. Это изображение показывает немного больше

public class MyAdapter extends extends ArrayAdapter<MyObject>{
   private ViewPager mViewPager;
   private ViewPagerAdapter mViewPagerAdapter;
//...

   public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

   final MyObject myObject =getItem(position);

//this part works
//viewpager loads the images
   mList.clear();
   mList.addAll(myObject.getListOfImgUri);
   mViewPagerAdapter = new 
   ViewPagerAdapter(mContext, mList); 
   mViewPager.setAdapter(mViewPagerAdapter);

   mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
   //this part never gets called
   mList.addAll(myObject.getSecondListOfImgUri());


        }
       });
 }

}

РЕДАКТИРОВАТЬ: после следующего совета, это полученный результат:

 mButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

       //previously, this part was never  called

        mList.clear();
       mList.addAll(myObject.getSecondListOfImgUri());

       Log.d(tag, mList.get(0));//result: Logs new Image
       mViewPagerAdapter.notifyDataSetChanged()

            }
           });
     }

    }

И, Внутри ViewPager:

@NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, final int position) {
            destroyItem(container, position,mViewGroup );
            mInflater = LayoutInflater.from(mContext);
            // mViewGroup = (ViewGroup) inflater.inflate(R.layout.view_item, container, false);

            mViewGroup = (ViewGroup) mInflater.inflate(R.layout.view_item,container, false);
            ImageView imageView = mViewGroup.findViewById(R.id.theImg);
            Glide.with(mContext).load(mListData.get(position)).diskCacheStrategy(DiskCacheStrategy.NONE).skipMemoryCache(true).into(imageView);
            container.addView(mViewGroup);
            Log.d(tag, "instantiateItem: " +mListData.get(0));//result: Logs new Image



            return mViewGroup;
        }

Но внутри Viewpager отображается только пустая страница.

Ответы [ 2 ]

0 голосов
/ 13 октября 2018
public class MyAdapter extends extends ArrayAdapter<MyObject>{
   private ViewPager mViewPager;
   private ViewPagerAdapter mViewPagerAdapter;
//...

   public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

   final MyObject myObject =getItem(position);

//this part works
//viewpager loads the images
   mList.clear();
   mList.addAll(myObject.getListOfImgUri);
   mViewPagerAdapter = new 
   ViewPagerAdapter(mContext, mList); 
   mViewPager.setAdapter(mViewPagerAdapter);

   mButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
   //this part never gets called
   mList.addAll(myObjecy.getSecondListOfImgUri);

   **mViewPagerAdapter.notifyDataSetChanged();**

        }
       });
 }

}
0 голосов
/ 13 октября 2018

Добавьте notifydatasetChanged() метод к mViewPagerAdapter.В настоящее время MyAdapter получает метод notifydatasetchanged().

...