Java 如何在viewpager中保存视图之间按下按钮的状态和值?
现在我有一个适配器类,它扩展了PagerAdapter。里面有我的instanceItem()方法 在这里,我实例化了视图上的几个按钮: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
@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