過去 2 日間、ViewPager ページのスクロールの問題に苦しんでいます。私を助けてみてください。
ListView の ListItem として ViewPager を使用しています。各 ListItem には異なる ViewPager があります。この ListView を作成し、ViewPagers をバインドする方法を以下に示します。
MainActivity -> ListAdapter -> listView getView() メソッドから PagerAdapter を設定します。この流れは正しいと思います。
現在、ViewPager でスクロールの問題に直面しています。次のページに移動するのは非常に困難です。ViewPager を保持してスクロールしようとすると、次のページが半分 (約) まで来て戻ってきます。
タッチ イベントを ListView から ViewPager Listener にルーティングし直しました。以下の貼り付けられたコードを親切に調べて、私を助けてください. どうもありがとうございました。
dash_board_list=(ListView)findViewById(R.id.dash_list);
dash_board_list.addHeaderView(upFooter);
// Getting adapter by passing xml data ArrayList
dash_borad_adapter=new DashBoardAdapter(DashBoard.this,MENUITEMS, IMAGEIDS,mEmpId);
dash_board_list.setAdapter(dash_borad_adapter);
dash_board_list.setSmoothScrollbarEnabled(false);
dash_board_list.setScrollContainer(false);
dash_board_list.setHorizontalScrollBarEnabled(false);
dash_board_list.setVerticalScrollBarEnabled(false);
dash_board_list.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
int id = (int) ((ListView)v).getSelectedItemId();
DashBoardAdapter.listener.onTouch(v,event);
return false;
}
});
また、My ListAdapter と ViewPager (リスト アダプターの内部クラス) を以下に示します。
public DashBoardAdapter(Context cont, String[] titles, int[] images, String empId) {
titleData= titles;
imageData = images;
context = cont;
mEmpId = empId;
listRowView = new View[titleData.length];
}
public int getCount() {
return titleData.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
View rowView ;
View vi=convertView;
if(convertView==null){
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(R.layout.dash_board_list_row, parent, false);
PageViewer pager = new PageViewer(position,rowView);
listRowView[position] = rowView;
}
else{
rowView = convertView;
}
return rowView;
}
public class PageViewer extends ViewPager{
/* @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}*/
public PageViewer(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public PageViewer(int position, View rowView) {
super(context);
myPager[position] = (ViewPager) rowView.findViewById(R.id.threepageviewer);
// TODO Auto-generated constructor stub
MyPagerAdapter adapter = new MyPagerAdapter(myPager[position],position, rowView);
// pager.setOffscreenPageLimit(3);
// pager.setAdapter(context);
class ViewFlipperTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
float x2, y2, dx, dy;
String direction;
switch(event.getAction()) {
case(MotionEvent.ACTION_DOWN):
downXvalue = event.getX();
downYvalue = event.getY();
break;
case(MotionEvent.ACTION_UP):
{
x2 = event.getX();
y2 = event.getY();
dx = x2-downXvalue;
dy = y2-downYvalue;
// Use dx and dy to determine the direction
if(Math.abs(dx) > Math.abs(dy)) {
if(dx>0) {
direction = "right";
//pager.setCurrentItem(0,true);
}
else {
direction = "left";
// pager.setCurrentItem(1,true);
}
} else {
if(dy>0) {
direction = "down";
}
else {
direction = "up";
}
}
// int currPage = ((ListView)v).getSelectedItemPosition();
}
}
return false;
}
}
listener = new ViewFlipperTouchListener();
myPager[position].setOnTouchListener(listener);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if(true){
Log.d("Dash","onInterceptTouchEvent");
}
return super.onInterceptTouchEvent(event);
}
}
public class MyPagerAdapter extends PagerAdapter {
int iListPosition = -1;
ViewPager myPager1;
public int getCount() {
return 3;
}
public MyPagerAdapter(View pager, int listPos, View rowView){
iListPosition = listPos;
//currentListRowView = rowView;
myPager1 = (ViewPager) pager;
myPager1.setOffscreenPageLimit(3);
myPager1.setAdapter(this);
// myPager1.setCurrentItem(0,true);
rowView.setId(listPos); // to know the listpos which is used in reloading the graphs.
//need to check whether it is conflicting with the actual ids
myPager1.setTag(rowView);
initButton(rowView);
myPager1.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
if(arg0 ==ViewPager.SCROLL_STATE_DRAGGING) {
}
}
});
}
enter code here