1

過去 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
4

0 に答える 0