提问者:小点点

带有适配器“”的ViewPager需要AsyncTask中的视图id


我有一个AsyncTask,其中我创建了一个ViewPager,当我为它分配一个适配器时,会出现这个错误

java.lang.IllegalStateException:带有适配器com.example.kos.pagerAdapterzvon@646Addd的ViewPager在Androidx.fragment.app.fragmentPagerAdapter.Startupdate(fragmentPagerAdapter.java:83)在Androidx.ViewPager.widget.ViewPager.populate(ViewPager.java:1124)在Androidx.ViewPager.widget.ViewPager.populate(ViewPager.java:1092)在eChildWithMargins(ViewGroup.java:6834)在Android.Widget.FrameLayout.OnMeasure(FrameLayout.java:185)在Android.View.View.Measure(View.java:23466)在Android.View.View.Measure(View.java:23466)在Android.View.ViewGroup.Measure(View.java:6834)在AndroidX.CoordinatorLayout.Widget.CoordinatorLayout.OnMeasureChild(Android.Widget.LinearLayout.MeasureVertical(LinearLayout.java:847)位于Android.Widget.LinearLayout.OnMeasure(LinearLayout.java:726)位于Android.View.View.Measure(view.java:23466)位于Android.View.ViewGroup.MeasureChildWithMargins(viewGroup.java:6834)位于Android.Widget.FrameLayout.OnMeasure(FrameLayout.java:185)位于954)在Android.View.ViewRootimpl.MeasureHierarchy(ViewRootimpl.java:1753)在Android.View.ViewRootimpl.PerformTraversals(ViewRootimpl.java:2041)在Android.View.ViewRootimpl.DoTraversal(ViewRootimpl.java:1636)在Android.View.ViewRootimpl$TraversalRunnable.Run(ViewRootimpl.java:7946)在Android.View.Choreographer

异步任务

     class StartAsyncTask extends AsyncTask<Void,String[],Void>{
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.gravity = Gravity.CENTER;
            linearLayout.removeAllViews();
            ProgressBar progressBar = new ProgressBar(context);
            linearLayout.addView(progressBar, layoutParams);
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            LinearLayout.LayoutParams layoutParamsKek = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParamsKek.gravity = Gravity.CENTER;
            linearLayout.removeAllViews();
           ViewPager viewPager = new ViewPager(context);
            viewPager.setAdapter(pagerAdapter);
            linearLayout.addView(viewPager,layoutParamsKek);
//            Date start = new Date();
//            switch (start.toString().substring(0,3)) {
//                case "Mon":
//                    viewPager.setCurrentItem(0);
//                    url = "Monday.txt";
//                    break;
//                case "Tue":
//                    viewPager.setCurrentItem(1);
//                    url = "Tuesday.txt";
//                    break;
//                case "Wed":
//                    viewPager.setCurrentItem(2);
//                    url = "Wednesday.txt";
//                    break;
//                case "Thu":
//                    viewPager.setCurrentItem(3);
//                    url = "Thursday.txt";
//                    break;
//                case "Fri":
//                    viewPager.setCurrentItem(4);
//                    url = "Friday.txt";
//                    break;
//                case "Sat":
//                    viewPager.setCurrentItem(5);
//                    url = "Saturday.txt";
//                    break;
//                default:
//                    viewPager.setCurrentItem(0);
//                    url = "Monday.txt";
//                    break;
//            }
////            SharedPreferences.Editor editor = settings.edit();
////            editor.putString("Day", url);
////            editor.apply();
////            tabLayout.setupWithViewPager(viewPager);
////            tabLayout.setScrollX(tabLayout.getWidth());
////            tabLayout.getTabAt(5).select();

        }

        @Override
        protected Void doInBackground(Void... voids) {
            pagerAdapter = new PagerAdapterZvon(getActivity().getSupportFragmentManager());
            return null;
        }
    }

转接器

class PagerAdapterZvon extends FragmentPagerAdapter {
        private String[] name;
        PagerAdapterZvon(@NonNull FragmentManager fm) {
            super(fm);
            name = new String[] {
                    "Понедельник",
                    "Вторник",
                    "Среда",
                    "Четверг",
                    "Пятница",
                    "Суббота"

            };
        }
        @Override
        public CharSequence getPageTitle(int position){
            return name[position];
        }
        @Override
        public int getCount() {
            return 6;
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return new classMonday();
                case 1:
                    return new classTuesday();
                case 2:
                    return new classWednesday();
                case 3:
                    return new classThursday();
                case 4:
                    return new classFriday();
                case 5:
                    return new classSaturday();

                default:
                    return null;
            }
        }
    }

所有操作都发生在一个片段中,如果删除AsyncTask并将所有操作转移到onCreate中,则所有操作都正常工作


共1个答案

匿名用户

看来您是完全从代码而不是通过布局文件创建Viewpager,这就是为什么您会出现错误(需要视图id)。创建ViewPager时请按照此处的说明操作:

带有FragmentPagerAdapter的ViewPager