Java 如何在viewpager中保存视图之间按下按钮的状态和值?

Java 如何在viewpager中保存视图之间按下按钮的状态和值?,java,android,android-viewpager,Java,Android,Android Viewpager,现在我有一个适配器类,它扩展了PagerAdapter。里面有我的instanceItem()方法 在这里,我实例化了视图上的几个按钮: @Override public Object instantiateItem(ViewGroup parent, final int position) { final int delPosition = position; //Get the

现在我有一个适配器类,它扩展了PagerAdapter。里面有我的instanceItem()方法

在这里,我实例化了视图上的几个按钮:

            @Override
            public Object instantiateItem(ViewGroup parent, final int position) {

                final int delPosition = position;
                //Get the inflater
                LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                //inflate the root layout
                View view = inflater.inflate(R.layout.collection, null);

                //Grab instance of image
                ImageView imageView = (ImageView) view.findViewById(R.id.region);

                //Sets a drawable as the content of this ImageView.
                imageView.setImageResource(regionImages.get(position));

                //scores toggle buttons
                zero = (ToggleButton) view.findViewById(R.id.number_zero);
                one = (ToggleButton) view.findViewById(R.id.number_one);
                two = (ToggleButton) view.findViewById(R.id.number_two);
                three = (ToggleButton) view.findViewById(R.id.number_three);
                four = (ToggleButton) view.findViewById(R.id.number_four);
                five = (ToggleButton) view.findViewById(R.id.number_five);
                six = (ToggleButton) view.findViewById(R.id.number_six);
                seven = (ToggleButton) view.findViewById(R.id.number_seven);
                eight = (ToggleButton) view.findViewById(R.id.number_eight);
                nine = (ToggleButton) view.findViewById(R.id.number_nine);
                ten = (ToggleButton) view.findViewById(R.id.number_ten);

                one.setOnClickListener(createClickListener(1));
                two.setOnClickListener(createClickListener(2));
                three.setOnClickListener(createClickListener(3));
                four.setOnClickListener(createClickListener(4));
                five.setOnClickListener(createClickListener(5));
                six.setOnClickListener(createClickListener(6));
                seven.setOnClickListener(createClickListener(7));
                eight.setOnClickListener(createClickListener(8));
                nine.setOnClickListener(createClickListener(9));
                ten.setOnClickListener(createClickListener(10));

                //Back Arrow Button
                final ImageView back_button = (ImageView) view.findViewById(R.id.back_nav_arrow);

                back_button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View view) {

                        //it doesn't matter if you're already in the first item
                        viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
                    }
                });


                //forward button 
                final ImageView forward_button = (ImageView) view.findViewById(R.id.forward_nav_arrow);

                forward_button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View view) {

                        //it doesn't matter if you're already in the last item
                        viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                    }
                });

                parent.addView(view, 0);
                return view;
            }
以下是按钮的onClick操作:

//onClickListener method that returns an interface
    private View.OnClickListener createClickListener(final int value) {
        return new View.OnClickListener()  {

            @Override
            public void onClick(View view) {

                buttonValue = value;

                ToggleButton clickedButton = (ToggleButton) view;
                RadioGroup radioGroup= (RadioGroup) clickedButton.getParent();

                for (int i = 0; i < radioGroup.getChildCount(); ++i) {
                    View nextChild = radioGroup.getChildAt(i);
                    if (!(nextChild instanceof ToggleButton)) {
                        continue;
                    }
                    if (nextChild.getId() != clickedButton.getId() || !clickedButton.isChecked()) {
                        ToggleButton tb2 = (ToggleButton) nextChild;
                        tb2.setChecked(false);
                    }
                }
            }

        };
    }
//返回接口的onClickListener方法
private View.OnClickListener createClickListener(最终int值){
返回新视图。OnClickListener(){
@凌驾
公共void onClick(视图){
按钮值=值;
ToggleButton clickedButton=(ToggleButton)视图;
RadioGroup RadioGroup=(RadioGroup)单击按钮。getParent();
对于(int i=0;i
我希望能够保存按钮按下的状态(现在它就像一个单选按钮,当用户点击它时,按钮状态被按下,直到他们移动到另一个按钮)和viewpager中视图之间的按钮值

最终,我希望在我的viewpager的末尾有一个视图,在这里我可以列出每个视图的所有分数,并且让用户返回到其他视图,并且仍然按下按钮状态,以便在视图之间滑动时确认

我现在面临两个问题:

1) 仅保存最后一个按钮值,而不是所有视图的所有按钮值。如何在所有视图中保存所有分数,而不仅仅是在最后一个视图中保存最后一个分数


2) 从一个视图切换到另一个视图并返回,按钮状态仍处于按下状态。但是,如果我从最后一点转到第三个视图,则按钮按下状态不再为真。我怎样才能解决这个问题

我认为现在是使用fragment的时候了,尽管您可以在没有它的情况下实现您想要的,但是使用fragment会带来很多好处,比如在活动被破坏时保存您的价值(轮换),或者使用生命周期回调方法,或者将其重新用于您未来的项目。无论如何:

1) 仅保存最后一个按钮值,而不是所有的按钮值 所有的观点。我如何实现保存所有项目中的所有分数 视图,而不仅仅是最后一个视图中的最后一个分数

以您喜欢的方式保存按钮的状态,例如在SharedReference、数据库或自定义对象列表中作为活动或适配器的成员,如下所示:

class MyToggleButton{
   boolean mState; // false = unpressed, true = pressed

}
并使用
List
存储它们

2) 从一个视图转到另一个视图,然后再返回,按钮状态仍然为 按下。但是,如果我从最后一点转到第三个视图,则 按下的按钮状态不再为真。我怎样才能解决这个问题


您可以使用
实例化项中的
列表
来确定哪个按钮必须具有哪个状态,以便正确设置它。当用户更改任何按钮的状态时,您必须更新
MyToggleButton
状态,以便在查看
列表时找到正确的按钮。

是否可以确定用户何时可以查看viewpager中的所有视图?还是不?如果我想启用一个保存按钮,如果视图中的所有视图都是由用户查看的?是的,对于每个页面,考虑一个称为ISVIEW的变量。您可以在Cool中将变量设置为true,这是一个好主意。所以,让我正确地理解一下:如果我想保存每个视图的按钮状态和值,我必须创建一个列表,并将mState的值设置为true或false。我得到视图的位置并将其映射到状态。所以我可以做一些事情,比如第1页:button isPressed=true,第2页:button isPressed=false,等等。。因此,当我在视图之间切换时,我可以在新启动视图时从该列表中获取值,并根据位置设置按钮/状态的值。谢谢,我现在正在尝试。我有一个问题,我有一个isViewed变量,我在onPageSelected()中将它设置为true,但是我如何知道用户是否查看了所有页面?我是否可以像if(isviewsed==true)那样对所有页面执行操作?什么是所有页面?我可以假设如果用户到达最后一个位置,那么他们已经查看了所有页面吗?“我可以假设如果用户到达最后一个位置,那么他们已经查看了所有页面吗?”如果没有任何选项卡,则为“是”。您可以创建一个对应于每个页面的布尔变量数组,并像这样使用:
isview[page#2]=true