Android 如果是viewpager,则复选框以片段形式滞后
我有一个viewpager,其中我正在膨胀片段(所有片段都有相同的布局),每个片段在xml中都有一个复选框。但是当我滑动到下一个片段时,复选框显示checked。我需要使用viewpager来显示一个甚至复杂的布局,其中复选框作为片段的标题,回收器视图作为片段的主体。但所有这些都是滞后的。 下面是我的示例代码(只是一个示例,如果解决了这个问题,我可以跳到我的原始任务上)。 任何帮助都将不胜感激 1。主要活动 2。MyFragmentAndroid 如果是viewpager,则复选框以片段形式滞后,android,android-viewpager,fragment,Android,Android Viewpager,Fragment,我有一个viewpager,其中我正在膨胀片段(所有片段都有相同的布局),每个片段在xml中都有一个复选框。但是当我滑动到下一个片段时,复选框显示checked。我需要使用viewpager来显示一个甚至复杂的布局,其中复选框作为片段的标题,回收器视图作为片段的主体。但所有这些都是滞后的。 下面是我的示例代码(只是一个示例,如果解决了这个问题,我可以跳到我的原始任务上)。 任何帮助都将不胜感激 1。主要活动 2。MyFragment 为什么在这里使用setTag()getTag()?你有复选框数
为什么在这里使用setTag()getTag()?你有复选框数组吗?@BhavikMehta。添加或删除setTag()无助于满足我的要求。这是一位同事提出的。看,你的问题有很多相关的东西,你的代码非常简单,但对我来说,有几个问题,比如,你想保持复选框状态不变,即使片段被刷过?你的offscreenpagelimit在这里扮演了一个重要角色,让我们聊聊,这样我可以帮你做这件事是的,我想保持复选框的状态不变。如果选中,则选中;如果未选中,则未选中。。。。如果你想知道的话。我想保存复选框状态。我需要的是,当我选中复选框时,复选框应该是可见的。但当我刷到下一页或上一页时,它会被检查。为什么在这里使用setTag()getTag()?你有复选框数组吗?@BhavikMehta。添加或删除setTag()无助于满足我的要求。这是一位同事提出的。看,你的问题有很多相关的东西,你的代码非常简单,但对我来说,有几个问题,比如,你想保持复选框状态不变,即使片段被刷过?你的offscreenpagelimit在这里扮演了一个重要角色,让我们聊聊,这样我可以帮你做这件事是的,我想保持复选框的状态不变。如果选中,则选中;如果未选中,则未选中。。。。如果你想知道的话。我想保存复选框状态。我需要的是,当我选中复选框时,复选框应该是可见的。但当我刷到下一页或上一页时,它会被检查。
public class MainActivity extends FragmentActivity{
public final static int PAGES = 5;
// You can choose a bigger number for LOOPS, but you know, nobody will fling
// more than 1000 times just in order to test your "infinite" ViewPager :D
public final static int LOOPS = 1000;
public final static int FIRST_PAGE = PAGES * LOOPS / 2;
public MyPagerAdapter adapter;
public ViewPager pager;
MyFragment fragment;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager) findViewById(R.id.myviewpager);
adapter = new MyPagerAdapter(this, this.getSupportFragmentManager());
pager.setAdapter(adapter);
pager.setPageTransformer(false, adapter);
// Set current item to the middle page so we can fling to both
// directions left and right
pager.setCurrentItem(FIRST_PAGE);
// Necessary or the pager will only have one extra page to show
// make this at least however many pages you can see
pager.setOffscreenPageLimit(3);
// Set margin for pages as a negative number, so a part of next and
// previous pages will be showed
pager.setPageMargin(-30);
}
}
public class MyFragment extends Fragment {
CheckBox checkBox;
public static Fragment newInstance(MainActivity context, int pos, float scale) {
Bundle b = new Bundle();
b.putInt("pos", pos);
b.putFloat("scale", scale);
return Fragment.instantiate(context, MyFragment.class.getName(), b);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
View view = inflater.inflate(R.layout.mf, container, false);
final int pos = this.getArguments().getInt("pos");
TextView tv = (TextView) view.findViewById(R.id.text);
checkBox = (CheckBox) view.findViewById(R.id.checkbox);
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Jobi", "checkbox clicked");
if (checkBox.isSelected() == true) {
checkBox.setTag(view.getTag(pos));
checkBox.setSelected(false);
} else {
checkBox.setTag(view.getTag(pos));
checkBox.setSelected(true);
}
}
});
tv.setText("Position = " + pos);
RelativeLayout relative_layout = (RelativeLayout) view.findViewById(R.id.relative_layout);
relative_layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Jobi", " At Position " + pos);
}
});
MyLinearLayout root = (MyLinearLayout) view.findViewById(R.id.root);
float scale = this.getArguments().getFloat("scale");
root.setScaleBoth(scale);
return view;
}
}