这是我的getChildView
:
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
View v = convertView;
ViewHolderChild h;
if (v == null) {
h = new ViewHolderChild();
switch (groupPosition) {
case GROUP_OVERVIEW:
v = inflater
.inflate(R.layout.adapter_show_child_overview, null);
h.wv_overview = (WebView) v
.findViewById(R.id.wv_adapter_show_child_overview);
h.tv_title = (TextView) v
.findViewById(R.id.tv_adapter_show_overview_title);
h.tv_date = (TextView) v
.findViewById(R.id.tv_adapter_show_overview_date);
h.tv_year = (TextView) v
.findViewById(R.id.tv_adapter_show_overview_year);
h.tv_network = (TextView) v
.findViewById(R.id.tv_adapter_show_overview_network);
h.tv_title.setTypeface(font_bold);
h.tv_date.setTypeface(font_thin);
h.tv_year.setTypeface(font_thin);
h.tv_network.setTypeface(font_bold);
v.setTag(h);
break;
case GROUP_SEASONS:
v = inflater.inflate(R.layout.adapter_shows_child_seasons, null);
h.siv = (SmartImageView) v.findViewById(R.id.siv_adapter_show_child_seasons);
h.tv_seasons = (TextView) v.findViewById(R.id.tv_adapter_show_child_seasons);
v.setTag(h);
break;
}
} else {
h = (ViewHolderChild) v.getTag();
}
switch (groupPosition) {
case GROUP_OVERVIEW:
OverView overview = groups.get(groupPosition).getOverview();
FunctionUtils.loadHtml(h.wv_overview, overview.getOverview(),
FunctionUtils.FONT_ROBOTO_THIN, 14);
h.tv_date.setText("" + overview.getAirDay() + "/"
+ overview.getAirTime());
h.tv_title.setText(overview.getTitle());
h.tv_year.setText("" + overview.getYear());
h.tv_network.setText("" + overview.getNetwork());
break;
case GROUP_SEASONS:
SeasonObject season = groups.get(groupPosition).getSeasons().get(childPosition);
if(season.getImages().getPoster() != null){
h.siv.setImageUrl(season.getImages().getPoster());
}
h.tv_seasons.setText("Season : "+season.getSeason()+" Episode : "+season.getEpisodes());
break;
}
return v;
}
但是当我开始向下滚动时,这一行就出现了问题:h.siv.setImageUrl(season.getImages().getPoster());
我看到了日志,它说h包含来自GROUP_OVERVIEW
而非GROUP_SEASONS
它会导致NullPointerException, ExpandableListConnector getView
这是logcat:
02-13 22:42:11.952: E/AndroidRuntime(7832): FATAL EXCEPTION: main
02-13 22:42:11.952: E/AndroidRuntime(7832): java.lang.NullPointerException
02-13 22:42:11.952: E/AndroidRuntime(7832): at com.galite.pomo.adapters.ShowAdapter.getChildView(ShowAdapter.java:117)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:451)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.AbsListView.obtainView(AbsListView.java:2161)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.ListView.makeAndAddView(ListView.java:1840)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.ListView.fillDown(ListView.java:675)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.ListView.fillGap(ListView.java:639)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4970)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3126)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3400)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.View.dispatchTouchEvent(View.java:7384)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2203)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1938)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2209)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1952)
02-13 22:42:11.952: E/AndroidRuntime(7832): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1966)
02-13 22:42:11.952: E/AndroidRuntime(7832): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1418)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.app.Activity.dispatchTouchEvent(Activity.java:2424)
02-13 22:42:11.952: E/AndroidRuntime(7832): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1914)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.View.dispatchPointerEvent(View.java:7564)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:3883)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3778)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3483)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3540)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3429)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3398)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3406)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3379)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5419)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5399)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5370)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5493)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:182)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:174)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5472)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5512)
02-13 22:42:11.952: E/AndroidRuntime(7832): at android.view.Ch
答案 0 :(得分:0)
当您使用两种类型的儿童项目视图时。所以你必须覆盖以下两种方法
final int CHILDVIEW_TYPE_COUNT = 2;
@Override
public int getChildTypeCount() {
return CHILDVIEW_TYPE_COUNT;
}
从您的代码中,这两种类型的视图都会被您的群组标记,我想您只有两个群组。
@Override
public int getChildType(int groupPosition, int childPosition)
{
return groupPosition;
}