ViewPager + spinners + array导致应用程序崩溃

时间:2012-01-17 03:51:36

标签: android arrays spinner android-arrayadapter android-viewpager

我的应用有两个独立的视图,最初使用TabHost分隔。我决定切换到ViewPager,使应用程序更具视觉吸引力。

但是现在应用程序一开始就崩溃了。现在,如果我注释掉关于微调器小部件和数组的所有线条,那么一切都很好,但对于我的生活,我无法弄清楚它们为什么会引起任何问题。他们使用TabHost设置工作得很好。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//context.startService(serviceIntent);
startService(new Intent(this, MY_Service.class));

setContentView(R.layout.main);

    MyPagerAdapter adapter = new MyPagerAdapter();
    ViewPager myPager = (ViewPager) findViewById(R.id.wedgpager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(0);
}

PagerAdapter类:

live_view只有一个按钮,其中有一个onClick侦听器在别处定义。

private class MyPagerAdapter extends PagerAdapter {

    public int getCount() {
            return 2;
    }

    public Object instantiateItem(View collection, int position) {

            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            int resId = 0;
            switch (position) {
            case 0:
                    resId = R.layout.live_view;
                    break;
            case 1:
                    resId = R.layout.pod_view;

                    // Capture the textview elements
                    mCurrentDate = (TextView) findViewById(R.id.currentdateDisplay);
                    mSelectedDate = (TextView) findViewById(R.id.selecteddateDisplay);

                    TextTotalTime = (TextView) findViewById(R.id.TotalTimeText);
                    TextCurrentTime = (TextView) findViewById(R.id.CurrentTimeText);

                    // Retrieve the current date
                    Calendar c = Calendar.getInstance();
                    mYear = c.get(Calendar.YEAR);
                    mMonth = c.get(Calendar.MONTH);
                    mDay = c.get(Calendar.DAY_OF_MONTH);


                    Spinner datespinner = (Spinner) findViewById(R.id.spinnerdate);
                    ArrayAdapter<CharSequence> dateadapter = new ArrayAdapter<CharSequence>(app_Live.this, android.R.layout.simple_spinner_item);
                    dateadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                    int ArrayMarker = 0;
                    for (int podtest = 1; podtest < 15; podtest++)  {
                        MakeDateList(podtest);
                        if (dayOfWeek != (1|7)) {
                            podFileTest = cMonthName + " " + cDay + ", " + cYear;
                            podDatesName[ArrayMarker] = podFileTest;
                            String cYearTemp = cYear + "";
                            String cMonthTemp = cMonth + "";
                            if (cMonth < 10) {
                                cMonthTemp = cMonthTemp.replace("0", "");
                                cMonthTemp = "0" + cMonthTemp;
                            }

                            if (cDay > 9)   {
                                podDates[ArrayMarker] = (cMonthTemp + "" + cDay + "" + cYearTemp.replace("20", ""));
                            }
                            if (cDay <= 9)  {
                                podDates[ArrayMarker] = (cMonthTemp + "" + "0" + cDay + "" + cYearTemp.replace("20", ""));
                            }
                            ArrayMarker++;

                            }
                        if (dayOfWeek == (1|7) && (ArrayMarker > 0))    {
                            ArrayMarker--;
                        }
                    }

                    for (int buildtext = 0; buildtext < 10; buildtext++)    {
                        dateadapter.add(podDatesName[buildtext]);
                    }

                   /* datespinner.setAdapter(dateadapter);

                    Spinner hourspinner = (Spinner) findViewById(R.id.spinnerhour);
                    ArrayAdapter<CharSequence> houradapter = ArrayAdapter.createFromResource(app_Live.this, R.array.hour_array, android.R.layout.simple_spinner_item);
                    houradapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                    hourspinner.setAdapter(houradapter);

                     // Display the current date under "Today's Date" at the top
                    updateCurrentDate();
                    datespinner.setOnItemSelectedListener(new DateOnItemSelectedListener());
                    hourspinner.setOnItemSelectedListener(new HourOnItemSelectedListener());

                    Button podplaybutton = (Button)findViewById(R.id.button_pod_play);
                    //podplaybutton.setOnClickListener(this);*/

                    break;
            }

            View view = inflater.inflate(resId, null);
            ((ViewPager) collection).addView(view, 0);

            return view;
    }

这是LogCat的第一个错误:

01-16 22:13:24.279:W / dalvikvm(20182):threadid = 1:线程退出,未捕获异常(group = 0x40a461f8) 01-16 22:13:24.384:E / AndroidRuntime(20182):致命异常:主要 01-16 22:13:24.384:E / AndroidRuntime(20182):android.content.res.Resources $ NotFoundException:资源ID#0x0 01-16 22:13:24.384:E / AndroidRuntime(20182):在android.content.res.Resources.getValue(Resources.java:1019) 01-16 22:13:24.384:E / AndroidRuntime(20182):在android.content.res.Resources.loadXmlResourceParser(Resources.java:2107)

1 个答案:

答案 0 :(得分:0)

好的,所以Selvin向我指出的答案是我没有把事情按顺序排列。我需要在View声明之前发起switch,然后不要只是致电findViewById我需要放view.findViewById

这是我现在正在使用的更新代码:(顺便说一下,如果有人知道更清晰的方式来编写当天提前14天的代码段,请随时告诉我们)

private class MyPagerAdapter extends PagerAdapter {

public int getCount() {
        return 2;
}

public Object instantiateItem(View collection, int position) {

        LayoutInflater inflater = (LayoutInflater) collection.getContext()
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        int resId = 0;
        View view = null;

        switch (position) {
        case 0:
                resId = R.layout.live_view;
                view = inflater.inflate(resId, null);
                break;
        case 1:
                resId = R.layout.pod_view;
                view = inflater.inflate(resId, null);

                // Capture the textview elements
                mCurrentDate = (TextView) view.findViewById(R.id.currentdateDisplay);
                mSelectedDate = (TextView) view.findViewById(R.id.selecteddateDisplay);

                TextTotalTime = (TextView) view.findViewById(R.id.TotalTimeText);
                TextCurrentTime = (TextView) view.findViewById(R.id.CurrentTimeText);

                // Retrieve the current date
                Calendar c = Calendar.getInstance();
                mYear = c.get(Calendar.YEAR);
                mMonth = c.get(Calendar.MONTH);
                mDay = c.get(Calendar.DAY_OF_MONTH);


                Spinner datespinner = (Spinner) view.findViewById(R.id.spinnerdate);
                ArrayAdapter<CharSequence> dateadapter = new ArrayAdapter<CharSequence>(app_Live.this, android.R.layout.simple_spinner_item);
                dateadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

                int ArrayMarker = 0;
                for (int podtest = 1; podtest < 15; podtest++)  {
                    MakeDateList(podtest);
                    if (dayOfWeek != (1|7)) {
                        podFileTest = cMonthName + " " + cDay + ", " + cYear;
                        podDatesName[ArrayMarker] = podFileTest;
                        String cYearTemp = cYear + "";
                        String cMonthTemp = cMonth + "";
                        if (cMonth < 10) {
                            cMonthTemp = cMonthTemp.replace("0", "");
                            cMonthTemp = "0" + cMonthTemp;
                        }

                        if (cDay > 9)   {
                            podDates[ArrayMarker] = (cMonthTemp + "" + cDay + "" + cYearTemp.replace("20", ""));
                        }
                        if (cDay <= 9)  {
                            podDates[ArrayMarker] = (cMonthTemp + "" + "0" + cDay + "" + cYearTemp.replace("20", ""));
                        }
                        ArrayMarker++;

                    }
                    if (dayOfWeek == (1|7) && (ArrayMarker > 0))    {
                        ArrayMarker--;
                    }
                }

                for (int buildtext = 0; buildtext < 10; buildtext++)    {
                    dateadapter.add(podDatesName[buildtext]);
                }

                datespinner.setAdapter(dateadapter);

                Spinner hourspinner = (Spinner) view.findViewById(R.id.spinnerhour);
                ArrayAdapter<CharSequence> houradapter = ArrayAdapter.createFromResource(app_Live.this, R.array.hour_array, android.R.layout.simple_spinner_item);
                houradapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                hourspinner.setAdapter(houradapter);

                 // Display the current date under "Today's Date" at the top
                updateCurrentDate();
                datespinner.setOnItemSelectedListener(new DateOnItemSelectedListener());
                hourspinner.setOnItemSelectedListener(new HourOnItemSelectedListener());

                Button podplaybutton = (Button)findViewById(R.id.button_pod_play);
                //podplaybutton.setOnClickListener(this);*/

                break;
        }

        ((ViewPager) collection).addView(view, 0);

        return view;
}