【发布时间】:2012-01-17 03:51:35
【问题描述】:
我的应用有两个单独的视图,它们最初是使用 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)
【问题讨论】:
-
order ...你应该先充气然后在充气视图而不是ViewPager上调用findViewById
-
实际上,我尝试过(在另一篇文章中建议)然后我收到一个预编译错误,说“视图”尚未在“返回视图”行上启动。
-
其实重读你的评论让我觉得我没有完全理解。不过我会试试看的。
-
让我猜猜……你在
switch声明之前添加了View view;? ...来吧,想一想,很明显...如果position不在您的“案例”中,则无法启动视图...因此将default:添加到switch并将视图设置为null或而不是View view;在那里给视图空值(View view = null;) -
mCurrentDate = (TextView) findViewById(R.id.currentdateDisplay);这个 findViewById 是从 ViewPager 调用的,但你应该像这样调用view.findViewById,其中视图是View view = inflater.inflate(resId, null);,但它还不存在
标签: android arrays spinner android-arrayadapter android-viewpager