3

左右のスワイプでビューを切り替えるには、ViewPager を使用します。

さまざまなビュー(カスタムリストビュー、画像ビューなど)がある内部にページャービューがあります。ページャービューがスライドされると、スクロールするインデックスに従って子の値を変更する必要があります。私の問題は、プロジェクトを実行しているときに、インデックスをスライドさせた後も0番目のインデックスではなく1番目のインデックスの値が表示されることです。スライドのサイズは、sqllite データベース内の値によって異なります。

ページャービューへの呼び出し

pager = (ViewPager) findViewById(R.id.panelPager);
        adapter = new MyPagerAdapter();     
        pager.setAdapter(adapter);
        pager.setCurrentItem(0);

これは私のページャー アダプター クラスです

public class MyPagerAdapter extends PagerAdapter {

        @SuppressWarnings("deprecation")
        @Override 
        public Object instantiateItem(View collection,int position) {   
            Log.d("Pos",""+position);
            PagerView = new View(collection.getContext());

            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            PagerView = inflater.inflate(R.layout.newmainviewpager, null, false);
            lvMenu=(ListView)PagerView.findViewById(R.id.lvMenuItem);
            imgMainItem=(ImageView)PagerView.findViewById(R.id.imgDisplay);
            edQty=(TextView)PagerView.findViewById(R.id.edQty1);
            edQty.setText("1");
            btnAdd=(Button)PagerView.findViewById(R.id.btnAdd);
            btnSub=(Button)PagerView.findViewById(R.id.btnsub);
            tvDesc=(TextView)PagerView.findViewById(R.id.tvDesc);
            btnPurchaseOrder=(Button)PagerView.findViewById(R.id.btnPlaceOrder);
            btnPurchaseOrder.setOnClickListener(RevisedMainMenu.this);
            imgfbConnect=(Button)PagerView.findViewById(R.id.imgfbConnect);
            imgfbConnect.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    FetchImagePath fetchimage = new FetchImagePath(RevisedMainMenu.this);
                    fetchimage.execute("http://192.168.1.6/dat/imagepath.php");
                }
            });
            displayMenu(position);
            btnAdd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    int qty=Integer.parseInt(edQty.getText().toString().trim());
                    qty=qty+1;
                    edQty.setText(String.valueOf(qty));
                }
            });
            btnSub.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    int qty=Integer.parseInt(edQty.getText().toString().trim());
                    if(qty>1)
                    {
                        qty=qty-1;
                        edQty.setText(String.valueOf(qty));
                    }
                    else
                        Toast.makeText(getApplicationContext(), "Invalid Operation",Toast.LENGTH_LONG).show();
                }
            });
            lvMenu.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    SubMenuid12=ExtraSubMenuIdlst.get(position);
                    byte[] photo =datasource.getImagePathFromSubMenuId(ExtraSubMenuIdlst.get(position));
                    ByteArrayInputStream imageStream = new ByteArrayInputStream(photo);
                    Bitmap theImage= BitmapFactory.decodeStream(imageStream);
                    Bitmap bitmapScaled = Bitmap.createScaledBitmap(theImage, 300,250, true);
                    Drawable drawable = new BitmapDrawable(bitmapScaled);
                    imgMainItem.setBackgroundDrawable(drawable);      
                    String Desc=datasource.getSubMenuDescriptionFromSubMenuId(SubMenuid12);
                    tvDesc.setText(Desc);
                    selectionPos=position;
                    Log.d("SelPos",""+selectionPos);   //.d("das","dasdas");
//                  
                }
            });
//          }
//          Log.d("MenuID",MenuIdlst.get(position));

            ((ViewPager) collection).addView(PagerView, 0);
            return PagerView;

        }
        @Override
        public void destroyItem(final View arg0, final int arg1,
                final Object arg2) {
            ((ViewPager) arg0).removeView((View) arg2);

        }

        @Override
        public boolean isViewFromObject(final View arg0, final Object arg1) {
            return arg0 == ((View) arg1);

        }

        @Override
        public void finishUpdate(View arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {
            // TODO Auto-generated method stub

        }

        @Override
        public Parcelable saveState() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public void startUpdate(View arg0) {
            // TODO Auto-generated method stub

        }
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return  MenuIdlst.size();
        }

    }

これが1番目に表示されるインデックス1で、 ここに画像の説明を入力

これは、1 番目に表示されるインデックス 0 番目の場所です。 ここに画像の説明を入力

4

2 に答える 2

1

使用する

setPrimaryItem(View container, int position, Object object)

アダプターで(オーバーライドします)

この目的のために。

于 2013-03-31T18:35:49.270 に答える
1

次のようにページ変更リスナー クラスを記述できます。

pager.setOnPageChangeListener(new OnPageChangeListener() {

    @Override
    public void onPageSelected(int pageNum) {
        // TODO Auto-generated method stub
        Log.d("index", "onpagechange: " + pageNum);
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {

    }

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }
});
于 2013-03-25T09:48:50.793 に答える