hemant
hemant

Reputation: 564

Get focused View from ViewPager not working properly

use the ViewPager for switching views with left/right swipe.

I have a pagerview inside that there are various view(custom list view , image view etc), When pagerview is slided the child values should be changed according to index to scroll. My problem is that when i am running my project the value is displayed of 1st index rather than 0th index also after sliding the index also is not appropriate. Slide size will depend upon the values inside the sqllite database.

Call to pagerview

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

This is my pager Adapter class

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();
        }

    }

This is index 1 which is displayed 1st , enter image description here

This is Index 0th location, which should be displayed 1st enter image description here

Upvotes: 3

Views: 1909

Answers (2)

Ercan
Ercan

Reputation: 3705

use

setPrimaryItem(View container, int position, Object object)

in your adapter(override it)

for this purpose.

Upvotes: 1

VINIL SATRASALA
VINIL SATRASALA

Reputation: 634

You can write page change listener class like this:

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

    }
});

Upvotes: 1

Related Questions