PullToRefreshListView适配器加载不同的layout

来源:互联网 发布:python logger format 编辑:程序博客网 时间:2024/06/05 01:53

最近做项目是遇到了一个需求,就是pullToRefreshListView要加载不同的layout, 适配器代码如下:

/** * Created by user on 2016/1/14. */public class PageDetailAda extends BaseAdapter {    private Context mContext;    private CommunityDetailBean communityDetailBean;    private List<CommentDetailBean> list;    private LayoutInflater layoutInflater;    private final int type1 = 0;    private final int type2 = 1;    ViewHolderCommu holderCommu;    ViewHolderComment holderComment;    public PageDetailAda(Context mContext, CommunityDetailBean communityDetailBean, List<CommentDetailBean> list) {        this.communityDetailBean = communityDetailBean;        this.list = list;        this.layoutInflater = LayoutInflater.from(mContext);        Log.e("pageDetailAda"," "+list.size()+" "+communityDetailBean.createtime);    }    @Override    public int getCount() {        return list.size()-1;    }    @Override    public Object getItem(int position) {     /*   if (position == 1) {            return communityDetailBean;        } else {            return list.get(position);        }*/        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public int getViewTypeCount() {        return 2;    }    @Override    public int getItemViewType(int position) {        if (position == 1) {            return type1;        } else {            return type2;        }    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        int type = getItemViewType(position);        Log.e("PageDetail","  getView");        if (convertView == null) {            switch (type) {                case type1:                    holderCommu = new ViewHolderCommu();                    convertView = layoutInflater.inflate(R.layout.item_invitation_detail, null);                    holderCommu.nameTv = (TextView) convertView.findViewById(R.id.name);                    holderCommu.timeTv = (TextView) convertView.findViewById(R.id.time);                    holderCommu.nineGridLayout = (NineGridLayout) convertView.findViewById(R.id.nineGridLayout);                    holderCommu.icon = (ImageView) convertView.findViewById(R.id.img);                    convertView.setTag(holderCommu);                    break;                case type2:                    convertView = layoutInflater.inflate(R.layout.item_remark_detail, null);                    holderComment = new ViewHolderComment();                    holderComment.nameTv = (TextView) convertView.findViewById(R.id.name);                    holderComment.icon = (ImageView) convertView.findViewById(R.id.img);                    holderComment.likeCountTv = (TextView) convertView.findViewById(R.id.likeTv);                    holderComment.remarkTv = (TextView) convertView.findViewById(R.id.content);                    holderComment.timeTv=(TextView)convertView.findViewById(R.id.time);                    convertView.setTag(holderComment);                    break;            }        } else {            switch (type) {                case type1:                    holderCommu = (ViewHolderCommu)convertView.getTag();                    break;                case type2:                    holderComment = (ViewHolderComment) convertView.getTag();                    break;            }        }        switch (type) {            case type1:                holderCommu.nameTv.setText(communityDetailBean.user_nickname);                holderCommu.timeTv.setText(communityDetailBean.createtime);                break;            case type2:                holderComment.timeTv.setText(list.get(position).createtime);                holderComment.nameTv.setText(list.get(position).user_nickname);                holderComment.remarkTv.setText(list.get(position).text);                break;        }        return convertView;    }    static class ViewHolderCommu {        TextView nameTv;        TextView timeTv;        NineGridLayout nineGridLayout;        ImageView icon;        TextView focusingTv;    }    static class ViewHolderComment {        TextView nameTv;        TextView timeTv;        ImageView icon;        TextView likeCountTv;        TextView remarkTv;    }}

结果却报错了,错误信息如下:

01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.widget.AbsListView$RecycleBin.addScrapView(AbsListView.java:6355)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4883)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3087)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.widget.AbsListView.onTouchEvent(AbsListView.java:3361)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.View.dispatchTouchEvent(View.java:7246)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2168)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1903)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2174)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1953)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1405)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.app.Activity.dispatchTouchEvent(Activity.java:2410)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1901)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.View.dispatchPointerEvent(View.java:7426)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3244)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3189)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4316)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4295)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4387)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4366)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4406)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.Choreographer.doCallbacks(Choreographer.java:562)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.Choreographer.doFrame(Choreographer.java:530)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:725)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:92)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:137)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5069)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at java.lang.reflect.Method.invokeNative(Native Method)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Method.java:511)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-15 10:47:13.919 17012-17012/com.acfun.act E/AndroidRuntime:     at dalvik.system.NativeStart.main(Native Method)


修改办法:将getViewType里面的type类型的值小于getTypeCount的返回值,比如type1=0,type2=1,而getTypeCount则返回2.即可解决,还有一种办法是适配器的布局用一个LinearLayout,然后根据position的判断来加载不同的layout.







0 0
原创粉丝点击