Note that there are some explanatory texts on larger screens.

plurals
  1. POPassing a Fragment in the constructor of an Adapter
    primarykey
    data
    text
    <p>Since the onClick event is never triggered on a <code>ViewPager</code> (see <a href="https://stackoverflow.com/questions/10243690/onclick-on-viewpager-not-triggered">this question</a>), I'm going to set the <code>onClickListener</code> to the item container in the adapter.</p> <p>The idea is, when an item is clicked, to call from the adapter a method from the Fragment in which this adapter is set to the <code>ViewPager</code>.</p> <p>For an <code>Activity</code> I would pass the context and call the method using this context (something like <code>((myActivity)context).itemContainerOnClick()</code>).</p> <p>But how can I do with a Fragment? Could I face any issue passing the Fragment as an argument to my adapter's constructor?</p> <p>Thanks</p> <p><b>Fragment</b></p> <pre><code>public class MyFragment extends Fragment { ViewPager mViewPager; int mPosition = 0; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = (RelativeLayout) inflater.inflate(R.layout.my_fragment_container, container, false); ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager); mViewPager.setAdapter(new MyAdapter(getActivity(), myObjectArray); mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { mPosition = position; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onPageScrollStateChanged(int state) {} }); mViewPager.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // I want to start some activity, passing mPosition // but this is never called } }); return view; } // Alternative to mViewPager.setOnClickListener, called from the adapter public void onViewPagerClick() { // start some activity, passing mPosition } } </code></pre> <p><b>PageAdapter</b></p> <pre><code>class MyAdapter extends PagerAdapter { private MyObject[] mItemArray; private Context mContext; public SejoursWidgetAdapter(Context context, MyObject[] itemArray) { mContext = context; mItemArray = itemArray; } @Override public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View row = inflater.inflate(R.layout.item, null); // Add click listener here because setting it directly on the ViewPager does not work (onClick not triggered) row.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // How can I call MyFragment's onViewPagerClick() ? } }); ((ViewPager) collection).addView(row); return row; } /* More stuff */ } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload