Android при прослушивании кликов по конкретному элементу страницы, который находится в viewpager

Я видел, как получить позицию страницы из пейджера просмотра здесь, но я хочу знать, есть ли способ получить действие щелчка по конкретному элементу на странице пейджера просмотра.

Пример: у меня пейджер просмотра содержит 3 страницы, например, Page1, Page2 и Page3. И в Page1 есть два элемента, 1 изображение 1 текстовое представление, я хочу сделать изображение действия щелчка.

Вот что я пробовал:

Адаптер:

public class CustomPagerAdapter extends PagerAdapter {

    private Context mContext;

    public CustomPagerAdapter(Context context) {
        mContext = context;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {

        BottomNavigationModel modelObject = BottomNavigationModel.values()[position];
        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), collection, false);
        collection.addView(layout);

        return layout;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

    @Override
    public int getCount() {
        return BottomNavigationModel.values().length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        BottomNavigationModel customPagerEnum = BottomNavigationModel.values()[position];
        return mContext.getString(customPagerEnum.getTitleResId());
    }

}

Деятельность:

viewPager.setAdapter(new CustomPagerAdapter(this));

viewPager.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            // Not calling this one TODO here
            }
        });

Модель:

public enum BottomNavigationModel {

    ONE(R.string.page_one, R.layout.view_row_one),
    TWO(R.string.page_two, R.layout.view_row_two),
    THREE(R.string.page_three, R.layout.view_row_three);

    private int mTitleResId;
    private int mLayoutResId;

    BottomNavigationModel(int titleResId, int layoutResId) {
        mTitleResId = titleResId;
        mLayoutResId = layoutResId;
    }

    public int getTitleResId() {
        return mTitleResId;
    }

    public int getLayoutResId() {
        return mLayoutResId;
    }

}

макет view_row_one:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:gravity="center_horizontal"
    android:orientation="horizontal">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/dashboard_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/nav_dashboard_blue" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="5dp"
            android:text="Dashboard"
            android:textSize="12sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/messenger_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/nav_messenger_white" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="5dp"
            android:text="Messenger"
            android:textSize="12sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/merlin_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/nav_custom_white" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="5dp"
            android:text="Custom"
            android:textSize="12sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/score_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/nav_score_white" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="5dp"
            android:text="Score"
            android:textSize="12sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/tasks_iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/nav_tasks_white" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="5dp"
            android:text="Tasks"
            android:textSize="12sp" />
    </LinearLayout>

</LinearLayout>

Здесь я хочу щелкнуть по любому изображению из моей деятельности.

Я ожидаю, что каждая страница - это фрагмент. Так почему бы просто не обработать onClick для класса фрагмента, в котором определена кнопка? или я что-то упускаю?

Lino 10.08.2018 15:41

Добавлен код, который я пробовал до сих пор

Shailendra Madda 10.08.2018 15:51
1
2
37
2

Ответы 2

Вы должны переопределить метод getItem () класса FragmentPagerAdapter или FRagmentStatePagerAdapter следующим образом:

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return new DescriptionFragment();
        case 1:
            return new ReviewFragment();
        case 3:
            return new OrderFragment();
        default:
            return null;
    }
}

Как видите, в зависимости от позиции вкладки, которую вы щелкнули, данный фрагмент раздувается. Таким образом, вы должны реализовать необходимое действие нажатия кнопки в этих отдельных фрагментах, как и в любом действии.

Я думаю, это может сработать для вас:

В вашем методе instantiateItem () вы можете получить изображение и установить на нем прослушиватель кликов, как показано ниже:

@Override
public Object instantiateItem(ViewGroup collection, int position) {

    BottomNavigationModel modelObject = BottomNavigationModel.values()[position];
    LayoutInflater inflater = LayoutInflater.from(mContext);
    ViewGroup layout = (ViewGroup) inflater.inflate(modelObject.getLayoutResId(), collection, false);
    ImageView dashboardImage = (ImageView) layout.findViewById(R.id.dashboard_iv);
    dashboardImage.setOnClickListener(myClickListener);
    //you cann add all wanted click on images here. 
    collection.addView(layout);

    return layout;
}

Но я могу счесть, что этот дизайн здесь не идеальный.

Другие вопросы по теме