繁体   English   中英

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

[英]ViewPager with adapter “ ” requires a view id In AsyncTask

我有一个 AsyncTask 我在其中创建了一个 ViewPager 并且当我为其分配一个适配器时,出现此错误

java.lang.IllegalStateException: ViewPager with adapter com.example.kos.PagerAdapterZvon@646addd requires a view id at androidx.fragment.app.FragmentPagerAdapter.startUpdate(FragmentPagerAdapter.java:83) at androidx.viewpager.widget.ViewPager.populate( ViewPager.java:1124) at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092) at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622) at android.view.View.measure(View .java:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565) at android.w idget.LinearLayout.measureVertical(LinearLayout.java:847) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:23466) at android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:6834) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.java:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java: 6834) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at android.view.View.measure(View.Z93F725A07423FE1C889F448B33D21 F46Z:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:733) at androidx.coordinatorlayout.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java :805) at android.view.View.measure(View.java:23466) at androidx.drawerlayout.widget.DrawerLayout.onMeasure(DrawerLayout.java:1119) at android.view.View.measure(View.java:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) at androidx.appcompat.widget.ContentFrameLayout .onMeasure(ContentFrameLayout.java:143) at android.view.View.measure(View.java:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout. java:1565) at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) 在 android.widget.FrameLayout.onMeasure( 725A07423FE1C889F448B33D21F46Z:185) at android.view.View.measure(View.java:23466) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6834) at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1565) at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) at android.widget.LinearLayout.onMeasure(LinearLayout.java:726) at android.view.View.measure(View.java:23466) at android.view.ViewGroup .measureChildWithMargins(ViewGroup.java:6834) 在 android.widget.FrameLayout.onMeasure(FrameLayout.Z93F725A07423FE1C889F448B33D21F4 ) at com.android.internal.policy.DecorView.onMeasure(DecorView.java:847) at android.view.View.measure(View.java:23466) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2954) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1753) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2041) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1636) at android.view. ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7946) 在 android.view.Choreographer$CallbackRecord.run(Choreographer.Z93F725A0742 3FE1C889F448B33D21F46Z:1092) at android.view.Choreographer.doCallbacks(Choreographer.java:893) at android.view.Choreographer.doFrame(Choreographer.java:812) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1078 ) at android.os.Handler.handleCallback(Handler.java:907) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:216) at android.app .ActivityThread.main(ActivityThread.java:7625) at java.lang.reflect.Method.invoke(Native Method) at com.ZC31B32364CE19CA8FCD150A41 7ECCE58Z.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

异步任务

     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 一切正常

看来您完全是从代码而不是通过布局文件创建 Viewpager,这就是您收到该错误的原因(需要视图 ID)。 创建 viewpager 时请按照此处的说明进行操作:

带有 FragmentPagerAdapter 的 ViewPager

只需调用 setId(R.id.your_id);

viewPager.setId(R.id.viewPagerId);

您可以通过按 OPTION + ENTER 创建一个 R.id id(在错误上,由于未解析的 id 而存在),然后单击 Create new id value。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM