ViewPager + счетчики + массив вызывают сбой приложения - PullRequest
0 голосов
/ 17 января 2012

Мое приложение имеет два отдельных представления, которые изначально были разделены с помощью 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: поток завершается с необработанным исключением (группа = 0x40a461f8) 01-1622: 13: 24.384: E / AndroidRuntime (20182): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной 01-16 22: 13: 24.384: E / AndroidRuntime (20182): android.content.res.Resources $ NotFoundException: идентификатор ресурса # 0x0 01-1622: 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 голосов
/ 18 января 2012

Хорошо, поэтому, как указал мне Селвин, я не расставлял вещи по порядку.Мне нужно было инициировать 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;
}
...