如何保持在ListView ViewPager的状态? [英] How to maintain the state of ViewPager in a ListView?

查看:196
本文介绍了如何保持在ListView ViewPager的状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现ViewPagers列表。一个ListView的每个产品ViewPager。这工作至今。我的问题是,我不能保持ViewPager的状态。例如:当我改变第一ViewPager的页面列表中,向下滚动,直到第一个ViewPager不再可见,然后滚动起来,首先ViewPager再次显示了它的第一页

I want to implement a list of ViewPagers. Every item of a ListView is ViewPager. This works so far. My problem is, I can not maintain the state of the ViewPager. For example: when I change the page of the first ViewPager in the list, scroll down until the first ViewPager is no longer visible and then scroll up again, the first ViewPager is shows its first page again.

我写了两个适配器,一个用于ListView和一个用于ViewPager。我试图回收从ListAdapter的getView方法convertView参数的观点。不知道我是否做对了,也不知道怎么做,在ViewPagerAdapter。

I wrote two adapters, one for the ListView and one for the ViewPager. I'm trying to recycle the view from convertView parameter of the getView method in the ListAdapter. Not sure whether I'm doing it right and no idea how to do it in the ViewPagerAdapter.

任何想法?

这是我的code到目前为止:

here is my code so far:

getView从MyListAdapter:

getView from MyListAdapter:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView == null){
        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mRowView = inflater.inflate(R.layout.listitem, parent, false);

    }else{
        mRowView=convertView;
    }
    switch(position){
    case 0://Fussball
        ViewPagerAdapter fussballAdapter = new ViewPagerAdapter(mContext,"Fussball");
        ViewPager fussballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1);
        fussballPager.setAdapter(fussballAdapter);
    break;
    case 1://Handball
    ViewPagerAdapter handballAdapter = new ViewPagerAdapter(mContext,"Handball");
        ViewPager handballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1);
        handballPager.setAdapter(handballAdapter);
        break;
    //.../
    default:
        //Do nothing
    }
    return mRowView;
}

instantiateItem从ViewPagerAdapter:

instantiateItem from ViewPagerAdapter:

@Override
public Object instantiateItem(View pager, int position) {
    inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    switch(position){
    case 0:
        oneLayout=inflater.inflate(R.layout.table_layout, null);
        break;
    case 1:
        oneLayout=inflater.inflate(R.layout.table_layout_second, null);
        break;
    default:
        oneLayout=inflater.inflate(R.layout.table_layout, null);
        break;
    }
    ((ViewPager)pager).addView( oneLayout, 0 );
    return oneLayout;
}

谢谢! :)

Thanks! :)

推荐答案

您可以感谢的ListView循环利用为这个问题的原因。 它帮助进行回收回收你的行项目,并重新使用它。

You can thank ListView Recycling as the cause of this problem. It help performs the recycler reclaims your row items and reuses it.

一个简单的办法,应该解决您的问题是使用标签。设置标签返回rowView之前。

One easy fix that should solve your problem is using tag. Set the tag before you return rowView.

view.setTag(currentPagerPosition);

那么,如果convertView!= NULL,你知道你必须设置的位置,所以你可以做

Then if convertView != null you know you must have set the position so you can do

int pastPagerPosition = (int) view.getTag();

这篇关于如何保持在ListView ViewPager的状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆