ViewPager
(this question 참조)에서 onClick 이벤트가 실행되지 않으므로 onClickListener
을 어댑터의 항목 컨테이너로 설정합니다.어댑터 생성자에서 단편 전달
항목을 클릭하면 해당 어댑터가 ViewPager
으로 설정된 조각에서 어댑터에서 호출하는 것이 좋습니다.
Activity
의 경우 컨텍스트를 전달하고이 컨텍스트를 사용하여 메서드를 호출합니다 (((myActivity)context).itemContainerOnClick()
).
그러나 조각으로 어떻게 할 수 있습니까? 어댑터의 생성자에 인수로 Fragment를 전달하는 데 문제가있을 수 있습니까?
감사
조각
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
}
}
PageAdapter
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 */
}
질문에 대답하지 않습니다 현재 페이지의 위치를 얻을 수 있지만, 내 문제를 해결하실 수 있습니다! – jul
이 태그는 호출기를 사용하고 동시에 여러 페이지를 화면에 표시 할 때 매우 효과적입니다. –