Gaurav Arora
Gaurav Arora

Reputation: 8362

Swipe View Pager Item on Button Click - Navigation

I have a list of view pager items, where in every row there are view pager items. I want to make the type of layout for a view pager item as shown in the image attached, where the user should be able to move the view pager using the arrow clicks too.

enter image description here

I am not able to get how to achieve the same, here is my code for the list adapter and pager adapter :

ListView GetView

 ViewHolder holder;
    if(rowView==null){
        holder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.horizontal_list_item, parent,
                false);
        MyPagerAdapter adapter = new MyPagerAdapter(context);
        ViewPager myPager = (ViewPager) rowView.findViewById(R.id.mypager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(4, true);

        rowView.setTag(holder);
    }
    else{
        holder = (ViewHolder) rowView.getTag();
    }

PagerAdapter

 @Override
 public Object instantiateItem(View container, final int position) {
LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = (LinearLayout) inflater.inflate(
        R.layout.inner_layout_file, null);

TextView tv_view = (TextView) layout.findViewById(R.id.text);
tv_view.setText("Example Item " + position);
((ViewPager) container).addView(layout);

});
return layout;

Pager Item Layout (inner_layout_file)

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/inner_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="6.0dip"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:gravity="center_vertical"
        android:text="Example Value"
        android:textAppearance="?android:textAppearanceMedium" />

 </LinearLayout>

I am not able to get where to add the arrows and where to perform their on-clicks on runtime. I want to swipe the pager views using the arrows on the left and right

Upvotes: 0

Views: 1973

Answers (1)

Nitesh Tiwari
Nitesh Tiwari

Reputation: 4762

You should inflate the ViewPager within the ListView and set the Adapter for it there

This Is How you can do it...

public View getView(int position, View view, ViewGroup vGroup) {
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        vRow=view;
        final ContentHolder holder;
        if(view==null){
            holder=new ContentHolder();

                        //infalte your viewPager here

            vRow=inflater.inflate(R.layout.activity_swipe_view_pager, null);
            holder.vPager=(ViewPager) vRow.findViewById(R.id.ui_pager);
            holder.radiogrp=(RadioGroup) vRow.findViewById(R.id.ui_radiogroup);
            addRadio=new AddRadioViewSwipe(context, pageCount);
            addRadio.addRadio(holder.radiogrp);
            holder.radiogrp.getChildAt(0).setAlpha(1.0f);
            holder.vPager.setTag(R.id.ui_pager, "hold");
            vRow.setTag(holder);
        }
        else{
            holder=(ContentHolder) vRow.getTag();
        }

        pagerAdpt=new ViewPagerAdapter(context, integer,R.layout.activity_viewpager_model);
        Parcelable state=holder.vPager.onSaveInstanceState();

                 //set your adapter here

        holder.vPager.setAdapter(pagerAdpt);

        holder.vPager.setOffscreenPageLimit(integer.length);
        holder.vPager.setTag(position);
        Float den = (float) context.getResources().getDisplayMetrics().densityDpi;
        holder.vPager.setPageMargin((int) -den);
        holder.vPager.onRestoreInstanceState(state);
        holder.vPager.setOnPageChangeListener(new OnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                for(int i=0;i<pageCount;i++){
                    holder.radiogrp.getChildAt(pageCount-(i+1)).setAlpha(0.5f);
                }                   
                holder.radiogrp.getChildAt(position).setAlpha(1.0f);
            }

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

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
        return vRow;
    }

Hope this could help you...

Upvotes: 1

Related Questions