维持查看翻转的列表视图状态 [英] Maintain the state of View Flipper in List View

查看:194
本文介绍了维持查看翻转的列表视图状态的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有看法的脚蹼列表视图项,我在运行时加载的项目,以查看翻转。

问题:我的问题是,当我翻转意见特定行,当我滚动列表视图,这是翻转到右后设置一个特定的位置来看,丢失

在滚动中的所有行的观点鳍被重新初始化为0号状态。

下面是我的底座适配器:

 公共类ListViewAdapter延伸BaseAdapter {    私人上下文的背景下;
    私人的ArrayList< TypeOneDataClass> typeOneList;
    私人LayoutInflater吹气;
    公共静态的ArrayList< ViewPager> myPagers =新的ArrayList< ViewPager>();
    私人的ArrayList<整数GT; myInnerList;
    //公共静态的ArrayList< ArrayList的<整数GT;> myList中=新的ArrayList< ArrayList的<整数GT;>();
    私人的ArrayList< FlipperPosition> myFlipList =新的ArrayList< FlipperPosition>();    公共ListViewAdapter(上下文的背景下,
            ArrayList的< TypeOneDataClass> typeOneList){
        this.context =背景;
        this.typeOneList = typeOneList;
        吹气=(LayoutInflater)上下文
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }    @覆盖
    公众诠释的getCount(){
        // TODO自动生成方法存根
        返回typeOneList.size();
    }    @覆盖
    公共对象的getItem(INT位置){
        // TODO自动生成方法存根
        返回typeOneList.get(位置);
    }    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }    @覆盖
    公众诠释getItemViewType(INT位置){
        // TODO自动生成方法存根
        返回IGNORE_ITEM_VIEW_TYPE;
    }    @覆盖
    公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
        ViewHolder持有人;
        FlipperPosition flipperPosition;
        如果(convertView == NULL){
            持有人=新ViewHolder();
            convertView = inflater.inflate(R.layout.list_item,空,假);
            holder.viewFlipper =(ViewFlipper)convertView.findViewById(R.id.myFlipper);
            的for(int i = 0; I< typeOneList.get(位置).getDetailsList()大小();我++){
                视图V = inflater.inflate(R.layout.pager_item,NULL);
                holder.viewFlipper.addView(五);                最终的TextView tv_name =(TextView中)v.findViewById(R.id.tv_name);
                最终的TextView tv_fathersName =(TextView中)v.findViewById(R.id.tv_fathersname);
                按钮btn_right =(按钮)v.findViewById(R.id.btn_right);
                按钮btn_left =(按钮)v.findViewById(R.id.btn_left);                最后ViewHolder vHolder =持有人;                btn_left.setOnClickListener(新View.OnClickListener(){
                    @覆盖
                    公共无效的onClick(视图v){
                        vHolder.viewFlipper.setInAnimation(背景下,R.anim.slide_in_left);
                        vHolder.viewFlipper.setOutAnimation(背景下,R.anim.slide_out_right);
                        vHolder.viewFlipper.show previous();
                        Toast.makeText(背景下,行+位置++ vHolder.viewFlipper.indexOfChild(vHolder.viewFlipper.getCurrentView()),0).show();
                    }
                });                btn_right.setOnClickListener(新View.OnClickListener(){                    @覆盖
                    公共无效的onClick(视图v){
                        vHolder.viewFlipper.setInAnimation(背景下,R.anim.slide_in_right);
                        vHolder.viewFlipper.setOutAnimation(背景下,R.anim.slide_out_left);
                        vHolder.viewFlipper.showNext();
                        INT indexofFliper = vHolder.viewFlipper.indexOfChild(vHolder.viewFlipper.getCurrentView());
                        Toast.makeText(背景下,行+位置++ indexofFliper,0).show();
                    }
                });                tv_name.setText(typeOneList.get(位置).getName());
                tv_fathersName.setText(typeOneList.get(position).getDetailsList().get(myFlipList.get(position).getFlipTermSet()).getFathersname());
            }
            convertView.setTag(保持器);
        }其他{
            支架=(ViewHolder)convertView.getTag();
        }
        返回convertView;
    }
    类ViewHolder {
        ViewFlipper viewFlipper;
    }


解决方案

我不知道什么是 TypeOneDataClass 是的,但我建议增加一个额外的领域它,如:

  INT lastDisplayed;

然后你就可以改变你的按钮来保存当前的状态:

  btn_left.setOnClickListener(新View.OnClickListener(){
    @覆盖
    公共无效的onClick(视图v){
        vHolder.viewFlipper.setInAnimation(背景下,R.anim.slide_in_left);
        vHolder.viewFlipper.setOutAnimation(背景下,R.anim.slide_out_right);
        vHolder.viewFlipper.show previous();
        //保存状态
        typeOneList.get(位置).lastDisplayed = vHolder.viewFlipper.getDisplayedChild();
    }
});btn_right.setOnClickListener(新View.OnClickListener(){
    @覆盖
    公共无效的onClick(视图v){
        vHolder.viewFlipper.setInAnimation(背景下,R.anim.slide_in_right);
        vHolder.viewFlipper.setOutAnimation(背景下,R.anim.slide_out_left);
        vHolder.viewFlipper.showNext();
        //保存状态
        typeOneList.get(位置).lastDisplayed = vHolder.viewFlipper.getDisplayedChild();
    }
});

最后,你需要恢复状态,当行回来眼帘。

  convertView.setTag(持有人);
    //恢复状态
    holder.viewFlipper.setDisplayedChild(typeOneList.get(位置).lastDisplayed);
}其他{
    支架=(ViewHolder)convertView.getTag();
}
返回convertView;

I have view flipper as List View Item, and I load items to the View Flipper at runtime.

Problem : My problem is when I flip views to a particular row, and when I scroll the listview, the view which was set to a particular position after flipping to right, is lost.

On Scrolling the view flipper in all the rows are re-initialized to the 0th state.

Here is my Base Adapter:

public class ListViewAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<TypeOneDataClass> typeOneList;
    private LayoutInflater inflater;
    public static ArrayList<ViewPager> myPagers = new ArrayList<ViewPager>();
    private ArrayList<Integer> myInnerList;
    //public static ArrayList<ArrayList<Integer>> myList = new ArrayList<ArrayList<Integer>>();
    private ArrayList<FlipperPosition> myFlipList = new ArrayList<FlipperPosition>();

    public ListViewAdapter(Context context,
            ArrayList<TypeOneDataClass> typeOneList) {
        this.context = context;
        this.typeOneList = typeOneList;
        inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return typeOneList.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return typeOneList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public int getItemViewType(int position) {
        // TODO Auto-generated method stub
        return IGNORE_ITEM_VIEW_TYPE;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        FlipperPosition flipperPosition;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.list_item, null, false);
            holder.viewFlipper = (ViewFlipper)convertView.findViewById(R.id.myFlipper);
            for(int i=0;i<typeOneList.get(position).getDetailsList().size();i++){
                View v = inflater.inflate(R.layout.pager_item, null);
                holder.viewFlipper.addView(v);

                final TextView tv_name = (TextView)v.findViewById(R.id.tv_name);
                final TextView tv_fathersName = (TextView)v.findViewById(R.id.tv_fathersname);
                Button btn_right = (Button)v.findViewById(R.id.btn_right);
                Button btn_left = (Button)v.findViewById(R.id.btn_left);

                final ViewHolder vHolder = holder;

                btn_left.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_left);
                        vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_right);
                        vHolder.viewFlipper.showPrevious();
                        Toast.makeText(context, "Row"+position+" "+vHolder.viewFlipper.indexOfChild(vHolder.viewFlipper.getCurrentView()), 0).show();
                    }
                });

                btn_right.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_right);
                        vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_left);
                        vHolder.viewFlipper.showNext();
                        int indexofFliper = vHolder.viewFlipper.indexOfChild(vHolder.viewFlipper.getCurrentView());
                        Toast.makeText(context, "Row"+position+" "+indexofFliper, 0).show();
                    }
                });

                tv_name.setText(typeOneList.get(position).getName());
                tv_fathersName.setText(typeOneList.get(position).getDetailsList().get(myFlipList.get(position).getFlipTermSet()).getFathersname());
            }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        return convertView;
    }
    class ViewHolder {
        ViewFlipper viewFlipper;
    }

解决方案

I don't know what a TypeOneDataClass is, but I'd suggest adding an extra field to it, such as:

int lastDisplayed;

Then you can change your buttons to save the current state:

btn_left.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_left);
        vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_right);
        vHolder.viewFlipper.showPrevious();
        // SAVE STATE
        typeOneList.get(position).lastDisplayed = vHolder.viewFlipper.getDisplayedChild();
    }
});

btn_right.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        vHolder.viewFlipper.setInAnimation(context, R.anim.slide_in_right);
        vHolder.viewFlipper.setOutAnimation(context, R.anim.slide_out_left);
        vHolder.viewFlipper.showNext();
        // SAVE STATE
        typeOneList.get(position).lastDisplayed = vHolder.viewFlipper.getDisplayedChild();
    }
});

Finally, you need to restore that state when the row comes back into view.

    convertView.setTag(holder);
    // RESTORE STATE
    holder.viewFlipper.setDisplayedChild(typeOneList.get(position).lastDisplayed);
} else {
    holder = (ViewHolder) convertView.getTag();
}
return convertView;

这篇关于维持查看翻转的列表视图状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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