ViewPager を周期的にするという問題に直面しています。動的なデータのリストがあり、スワイプが行われるたびに動的データでビューを更新する必要があります。たとえば、リストに A、B、C、D、EI と言う 5 つのオブジェクトがあり、A -> B -> C -> D -> E から、また E -> D -> C - からスワイプできます。 > B -> A。しかし、E の後、右にスワイプすると A に移動し、左にスワイプすると A の後に E に移動するように、周期的にする必要があります。誰かがこれを行う方法を教えてください。どうもありがとう。
これまでに試したコードスニペットを次に示します。
public class FlingActivity extends BaseActivity implements OnClickListener{
private ViewPager pager;
private int position;
private int total;
private ArrayList<DataBean> beanList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (this.getIntent().hasExtra("position")) {
position = (int) this.getIntent().getExtras().getInt("position");
}
if(getIntent().hasExtra("listDetails")) {
beanList = (ArrayList<DataBean>)getIntent().getSerializableExtra("listDetails");
}
if(beanList != null){
total = beanList.size();
pager = (ViewPager) findViewById(R.id.pager);
((RelativeLayout) findViewById(R.id.right_arrow)).setOnClickListener(this);
((RelativeLayout) findViewById(R.id.left_arrow)).setOnClickListener(this);
pager.setVisibility(View.VISIBLE);
pager.setAdapter(new MyPagerAdapter(beanList));
pager.setOnPageChangeListener(new OnPageChangeListener() {
int lastPosition;
int posOffset=0;
public void onPageSelected(int arg0) {
position=arg0;
}
public void onPageScrolled(int arg0, float arg1, int arg2) {
if(arg0!=0 && arg1==0 && arg2 == 0){
lastPosition=arg0;
}
}
public void onPageScrollStateChanged(int arg0) {
if(position == total - 1){
position=total + 1;
}
if(arg0 == ViewPager.SCROLL_STATE_IDLE && position > total){
pager.setCurrentItem(0, true);
}
}
});
pager.setCurrentItem(position, true);
}
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.left_arrow:
if(pager != null) {
pager.setCurrentItem(pager.getCurrentItem() - 1, true);
}
break;
case R.id.right_arrow:
if(pager != null) {
pager.setCurrentItem(pager.getCurrentItem() + 1, true);
}
break;
}
}
private class MyPagerAdapter extends PagerAdapter {
private ArrayList<DataBean> beanList;
public MyPagerAdapter(ArrayList<DataBean> list) {
this.beanList = list;
}
public int getCount() {
return beanList.size();
}
public Object instantiateItem(View collection, int position) {
View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_view, null);
DataBean dataBean = beanList.get(position);
TextView name = (TextView) view.findViewById(R.id.name);
name.setText(dataBean.getName());
TextView description = (TextView) view.findViewById(R.id.desc);
description.setText("Description "
+ dataBean.getDesc());
((ViewPager) collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
}
}
上記のコードでは、E に移動した後、ページは自動的に A にスライドしますが、実際にはユーザーがスワイプした場合にのみ A に移動する必要があります。