ViewPager с адаптером "" требуется идентификатор вида в AsyncTask - PullRequest
0 голосов
/ 20 октября 2019

У меня есть AsyncTask, в котором я создаю ViewPager, и когда я назначаю ему адаптер, эта ошибка появляется

java.lang.IllegalStateException: ViewPager с адаптером com.example.kos.PagerAdapterZvon@ 646addd требуется идентификатор представления в androidx.fragment.app.FragmentPagerAdapter.startUpdate (FragmentPagerAdapter.java:83) в androidx.viewpager.widget.ViewPager.populate (ViewPager.java:1124) в androidx.viewpager.widget.ulatePager(ViewPager.java:1092) в androidx.viewpager.widget.ViewPager.onMeasure (ViewPager.java:1622) в android.view.View.measure (View.java:23466) в android.view.ViewGroup.measureChildWithMargins (ViewGroup. Java: 6834) на android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1565) на android.widget.LinearLayout.measureVertical (LinearLayout.java:847) на android.widget.LinearLayout.onMeasejarandroid.view.View.measure (View.java:23466) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) на android.widget.FrameLayout.onMeasure (FrameLayout.java:185) в android.view.View.measure (View.java:23466) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) в android.widget.FrameLayout. onMeasure (FrameLayout.java:185) в android.view.View.measure (View.java:23466) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) в androidx.coordinatorlayout.widget.CoordinatorLayout.onMordCore.java: 733) в androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure (CoordinatorLayout.java:805) в android.view.View.measure (View.java:23466) в androidx.drawerlayout.widget.DrawerLayout.onMeout (DrawerLayay. Java: 1119) на android.view.View.measure (View.java:23466) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) на android.widget.FrameLayout.onMeasure (FrameLayout.java:185) наandroidx.appcompat.widget.ContentFrameLayout.onMeasure (ContentFrameLayout.java:143) в android.view.View.measure (View.java:23466) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) по адресу android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1565) по адресу android.widget.LinearLayout.measureVertical (LinearLayout.java:8ay.. Linear.Layout.jar.Layout.jar.Lain.Larout.jar.java: 726) в android.view.View.measure (View.java:23466) в android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) в android.widget.FrameLayout.onMeasure (FrameLayout.java:185)на android.view.View.measure (View.java:23466) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) на android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1565) на android.widLinearLayout.measureVertical (LinearLayout.java:847) в android.widget.LinearLayout.onMeasure (LinearLayout.java:726) в android.view.View.measure (View.java:23466) в android.view.ViewGroup.measureChildWithGargins (.java: 6834) в android.widget.FrameLayout.onMeasure (FrameLayout.java:185) в com.android.internal.policy.DecorView.onMeasure(DecorView.java:847) в android.view.View.measure (View.java:23466) в android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2954) в 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.omp.Run (View) (View)в android.view.Choreographer $ CallbackRecord.run (Choreographer.java:1092) в android.view.Choreographer.doCallbacks (Choreographer.java:893) в android.view.Choreographer.doFrame (Хореограф.java:812 в)view.Choreographer $ FrameDisplayEventReceiver.run (Choreographer.java:1078) на android.os.Handler.handleCallback (Handler.java:907) на android.os.Handler.dispatchMessage (Handler.java:105) на android.os.Looper.loop (Looper.java:216) в android.app.ActivityThread.main (ActivityThread.java:7625) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:524) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:987)

AsyncTask

     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 Ответ

0 голосов
/ 20 октября 2019

Кажется, вы создаете свой Viewpager полностью из кода, а не из файла макета, поэтому вы получаете эту ошибку (требуется идентификатор представления). Пожалуйста, следуйте инструкциям здесь при создании viewpager:

ViewPager with FragmentPagerAdapter

...