Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带适配器的ViewPager"&引用;在AsyncTask中需要视图id_Java_Android_Android Fragments_Android Asynctask - Fatal编程技术网

Java 带适配器的ViewPager"&引用;在AsyncTask中需要视图id

Java 带适配器的ViewPager"&引用;在AsyncTask中需要视图id,java,android,android-fragments,android-asynctask,Java,Android,Android Fragments,Android Asynctask,我有一个AsyncTask,在其中我创建了一个ViewPager,当我为它分配了一个适配器时,会出现这个错误 java.lang.IllegalStateException:带有适配器com.example.kos的ViewPager。PagerAdapterZvon@646addd需要视图id 位于androidx.fragment.app.FragmentPagerAdapter.startUpdate(FragmentPagerAdapter.java:83) 位于androidx.vie

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

java.lang.IllegalStateException:带有适配器com.example.kos的ViewPager。PagerAdapterZvon@646addd需要视图id 位于androidx.fragment.app.FragmentPagerAdapter.startUpdate(FragmentPagerAdapter.java:83) 位于androidx.viewpager.widget.viewpager.populate(viewpager.java:1124) 位于androidx.viewpager.widget.viewpager.populate(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.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) 在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.onMeasureChild(coordinatorlayout.java:733) 位于androidx.coordinatorlayout.widget.coordinatorlayout.onMeasure(coordinatorlayout.java:805) 在android.view.view.measure(view.java:23466) 位于androidx.drawerlayout.widget.drawerlayout.onMeasure(drawerlayout.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: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) 在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.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) 位于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.run(ViewRootImpl.java:7946) 在android.view.Choreographer$CallbackRecord.run(Choreographer.java:1092) 位于android.view.Choreographer.doCallbacks(Choreographer.java:893) 位于android.view.Choreographer.doFrame(Choreographer.java:812) 在android.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)

异步任务

     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;
        }
    }

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

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


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

只需调用setId(R.id.your\u id)

您可以通过按OPTION+ENTER(在出现错误时,由于未解析的id而存在)并单击create new id value(创建新id值)来创建R.id id。只需调用setId(R.id.your_id)


您可以通过按OPTION+ENTER(在出现错误时,由于未解析的id而存在)并单击create new id value来创建R.id id。

是的,我在代码中创建了一个ViewPager,就像我在另一个AsyncTask中所做的一样,但使用了不同的适配器,并且一切都正常。您为什么要采用这种方法?在右边,ViewPager是一个UI项,应该根据链接通过布局文件创建
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;
            }
        }
    }
viewPager.setId(R.id.viewPagerId);