当前位置: 首页 > 知识库问答 >
问题:

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

雷国兴
2023-03-14

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

JAVAlang.IllegalStateException:带有适配器com的ViewPager。实例科斯。PagerAdapterZvon@646addd在androidx处需要视图id。碎片应用程序。碎裂翼翅。androidx上的startUpdate(FragmentPagerAdapter.java:83)。寻呼机。小装置。寻呼机。在androidx上填充(ViewPager.java:1124)。寻呼机。小装置。寻呼机。在androidx上填充(ViewPager.java:1092)。寻呼机。小装置。寻呼机。android上的onMeasure(ViewPager.java:1622)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1565)。小装置。线性布局。android上的measureVertical(LinearLayout.java:847)。小装置。线性布局。android上的onMeasure(LinearLayout.java:726)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:23466)。看法视图组。androidx上的measureChildWithMargins(ViewGroup.java:6834)。协调布局。小装置。协调布局。在androidx的MeasureChild(CoordinatorLayout.java:733)上。协调布局。小装置。协调布局。android上的onMeasure(CoordinatorLayout.java:805)。看法看法在androidx上测量(View.java:23466)。抽屉布局。小装置。抽屉布局。android上的onMeasure(DroperLayout.java:1119)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。框架布局。androidx上的onMeasure(FrameLayout.java:185)。appcompat。小装置。ContentFrameLayout。android上的onMeasure(ContentFrameLayout.java:143)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1565)。小装置。线性布局。android上的measureVertical(LinearLayout.java:847)。小装置。线性布局。android上的onMeasure(LinearLayout.java:726)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。框架布局。android上的onMeasure(FrameLayout.java:185)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1565)。小装置。线性布局。android上的measureVertical(LinearLayout.java:847)。小装置。线性布局。android上的onMeasure(LinearLayout.java:726)。看法看法在android上测量(View.java:23466)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:6834)。小装置。框架布局。com上的onMeasure(FrameLayout.java:185)。Android内部的政策德考维。android上的onMeasure(DecorView.java:847)。看法看法在android上测量(View.java:23466)。看法ViewRootImpl。android上的performMeasure(ViewRootImpl.java:2954)。看法ViewRootImpl。android上的measureHierarchy(ViewRootImpl.java:1753)。看法ViewRootImpl。android上的performTraversals(ViewRootImpl.java:2041)。看法ViewRootImpl。android上的doTraversal(ViewRootImpl.java:1636)。看法ViewRootImpl$TraversalRunnable。在android上运行(ViewRootImpl.java:7946)。看法编舞$CallbackRecord。在android上运行(Choreographer.java:1092)。看法编舞android上的doCallbacks(Choreographer.java:893)。看法编舞android上的doFrame(Choreographer.java:812)。看法Choreographer$FrameDisplayEventReceiver。在android上运行(Choreographer.java:1078)。操作系统。处理程序。android上的handleCallback(Handler.java:907)。操作系统。处理程序。android上的dispatchMessage(Handler.java:105)。操作系统。活套。android上的loop(Looper.java:216)。应用程序。活动线程。java上的main(ActivityThread.java:7625)。朗。反思。方法在com上调用(本机方法)。Android内部的操作系统。RuntimeInit$MethodAndArgsCaller。在com上运行(RuntimeInit.java:524)。Android内部的操作系统。合子体。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,则所有操作都会正常工作

共有2个答案

杨超
2023-03-14

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

带FragmentPagerAdapter的ViewPager

常英毅
2023-03-14

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

viewPager.setId(R.id.viewPagerId);

您可以通过按ENTER选项(在错误中,由于未解析的id而存在)并单击“创建新id值”来创建R.id id id。

 类似资料:
  • 我有一个AsyncTask,其中我创建了一个ViewPager,当我为它分配一个适配器时,会出现这个错误 java.lang.IllegalStateException:带有适配器com.example.kos.pagerAdapterzvon@646Addd的ViewPager在Androidx.fragment.app.fragmentPagerAdapter.Startupdate(frag

  • 问题内容: 我有一些碎片。每个片段具有在(=挥动之前不可见的)用。 适配器设置为,这会减慢刷卡速度,因为每次创建时都要载入30个列表项,因为正在创建新的片段。 我的问题是,在空闲时刷卡后是否可以设置适配器?或者,还有更好的方法?扩展SlideDrawer时,该列表需要已经加载。 问题答案: 我的问题是,是否可以在Pager闲置时刷卡后设置适配器? 还有就是,你可以在设置监控的滑动手势。然后,您可以

  • 我正在寻找在Android中使用列表适配器和Recyview适配器的区别。关于性能的任何不同,使用它们的利弊。

  • 我正尝试使用实现的适配器,如下所示,正如这里的解决方案之一所建议的。

  • 我正在尝试使用PagerAdapter显示来自可绘制视图寻呼机的图像。为此,我编写了以下代码-- //调用PagerAdapter 下面是我的适配器类-- 下面是我的对话框 xml-- 下面是 ViewPager Item xml-- //下面是解释当前如何显示空的ViewPager的屏幕截图-- 当我调试应用程序时,一切似乎都很好,但不知道为什么图像没有显示在ViewPager中。请帮忙..