繁体   English   中英

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

[英]How can I save the state and value of button press between views in a viewpager?

现在,我有一个Adapter类,它扩展了PagerAdapter。 里面有我的InstantiateItem()方法。

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

            @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;
            }

这是buttosn的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);
                    }
                }
            }

        };
    }

我希望能够保存按钮按下的状态(现在就像单选按钮一样,当用户单击它时,按钮状态会一直按下直到他们移动到另一个按钮为止)和在viewpager中的视图之间保存buttonValue 。

最终,我希望在viewpager的末尾看到一个视图,在该视图中,我可以列出每个视图的所有得分,并让用户返回其他视图,并仍然按下其按钮状态,以便他们可以在之间滑动时确认意见。

我现在面临两个问题:

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

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

我认为现在是使用片段的时候了,虽然没有片段也可以实现所需的功能,但是使用片段会带来很多好处,例如在活动被破坏(旋转)或使用生命周期回调方法或将其重用到您的活动时保存您的价值。未来的项目。 无论如何:

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

将按钮的状态保存在您喜欢的任何位置,例如在sharedpreference,数据库或自定义对象列表中,作为您的活动或适配器的成员,如下所示:

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

}

并使用List<MyToggleButton>进行存储。

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

您可以使用List<MyToggleButton>instantiateItem以确定哪个按钮必须具有的状态,因此您可以正确设置。 当用户更改任何按钮的状态时,必须更新MyToggleButton状态,以便无论何时要查看List<MyToggleButton>可以找到正确的List<MyToggleButton>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM