Как обнаружить щелчок на ImageView в ViewPager PagerAdapter (android)?

Что происходит:

  1. Я пытаюсь обнаружить событие onclick для представления (изображения) в адаптере пейджера.
  2. Представление, которое я запускаю, это imgGodInfoId
  3. Это никогда не запускается
  4. Кажется, это работает в обычном адаптере ... так почему здесь он не срабатывает

AptAtomicGodGallery.java

public class AdptAtomicGodGallery extends PagerAdapter {
    // Declare Variables
    Context context;
    Integer[] godImages;
    LayoutInflater inflater;
    String godName;


    public AdptAtomicGodGallery(Context context, Integer[] _godImages, String _godName) {
        this.context = context;
        this.godImages = _godImages;
        this.godName=_godName;
    }

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

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

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

        // Declare Variables
        ImageView imgGodId;
        final ImageView imgGodInfoId;
        final RelativeLayout root;
        TextView txtShortDescription;

        inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View itemView = inflater.inflate(R.layout.adpt_atomic_god_gallery, container,false);

        // Locate the ImageView in viewpager_item.xml
        imgGodId = (ImageView) itemView.findViewById(R.id.imgGodId);
        imgGodInfoId = (ImageView) itemView.findViewById(R.id.imgGodInfoId);
        root= (RelativeLayout) itemView.findViewById(R.id.root);
        txtShortDescription= (TextView) itemView.findViewById(R.id.txtShortDescription);

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize = 4;
        Bitmap preview_bitmap = BitmapFactory.decodeResource(context.getResources(),godImages[position], options);
        Drawable drawable = new BitmapDrawable(context.getResources(),preview_bitmap);
        root.setBackgroundDrawable(drawable);
        root.setTag(godImages[position]);
        imgGodInfoId.setTag(godName);


        if(godName.equalsIgnoreCase(Constants.GOD_ONE)){
            txtShortDescription.setText(Constants.GOD_ONE_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_TWO)){
            txtShortDescription.setText(Constants.GOD_TWO_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_THREE)){
            txtShortDescription.setText(Constants.GOD_THREE_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_FOUR)){
            txtShortDescription.setText(Constants.GOD_FOUR_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_FIVE)){
            txtShortDescription.setText(Constants.GOD_FIVE_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_SIX)){
            txtShortDescription.setText(Constants.GOD_SIX_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_SEVEN)){
            txtShortDescription.setText(Constants.GOD_SEVEN_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_EIGHT)){
            txtShortDescription.setText(Constants.GOD_EIGHT_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_NINE)){
            txtShortDescription.setText(Constants.GOD_NINE_DESCRIPTION_SHORT_DESC);
        }else if(godName.equalsIgnoreCase(Constants.GOD_TEN)){
            txtShortDescription.setText(Constants.GOD_TEN_DESCRIPTION_SHORT_DESC);
        }



        imgGodInfoId.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                /*  BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 4;
                Bitmap preview_bitmap = BitmapFactory.decodeResource(context.getResources(),(Integer) root.getTag(), options);

                 */

                Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show();

                /*Intent intent=new Intent(context,ActAtomicGodDetailDesc.class);
                intent.putExtra("GOD_NAME", imgGodInfoId.getTag().toString());
                intent.putExtra("GOD_IMAGE",(Integer) root.getTag());
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(intent);*/

            }
        });


        // Add viewpager_item.xml to ViewPager
        ((ViewPager) container).addView(itemView);



        return itemView;
    }




    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // Remove viewpager_item.xml from ViewPager
        ((ViewPager) container).removeView((LinearLayout) object);

    }
}

Xml для адаптера пейджера

<RelativeLayout
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imgGodInfoId"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:clickable="true"
        android:padding="5dp"
        android:scaleType="fitXY"
        android:src="@drawable/img_info_black" />

    <LinearLayout
        android:id="@+id/selShortDescContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@drawable/sel_selectyourgod"
        android:gravity="center" >

        <TextView
            android:id="@+id/txtShortDescription"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="@string/swipe_notification"
            android:textColor="#FFFFFF"
            android:textSize="12sp"
            android:textStyle="bold"
            android:color="#55000000" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/selFavGodsContainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/selShortDescContainer"
        android:layout_alignParentLeft="true"
        android:layout_marginBottom="141dp"
        android:background="@drawable/sel_selectyourgod"
        android:gravity="center" >

        <TextView
            android:id="@+id/txtNotification"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:paddingBottom="10dp"
            android:paddingTop="10dp"
            android:text="@string/swipe_notification"
            android:textColor="#FFFFFF"
            android:textSize="12sp"
            android:textStyle="bold"
            android:color="#55000000" />
    </LinearLayout>
</RelativeLayout>


comment
Вы добавили android:clickable="true" в xml для ImageView?   -  person ρяσѕρєя K    schedule 21.02.2015
comment
@ρяσѕρєяK ... Да, я пробовал ... все равно тост в коде не срабатывает   -  person Devrath    schedule 21.02.2015
comment
родительский вид ImageView доступен для кликов или нет?   -  person ρяσѕρєя K    schedule 21.02.2015
comment
@ρяσѕρєя K .... да, родитель также кликабельный ......... но использовал ли я правильный код для обнаружения щелчка ... потому что я никогда не пытался обнаружить щелчк в адаптере пейджера, казалось работать для обычного списка... эта логика   -  person Devrath    schedule 21.02.2015
comment
root макет также можно щелкнуть ?   -  person ρяσѕρєя K    schedule 21.02.2015
comment
@ρяσѕρєяK .... я тоже разместил xml адаптера .. пожалуйста, проверьте   -  person Devrath    schedule 21.02.2015
comment
Давайте продолжим это обсуждение в чате.   -  person Devrath    schedule 21.02.2015


Ответы (1)


Я смог сделать это следующим образом: переопределить метод onViewCreated() Fragment, удерживаемый вашим ViewPager, как:

@Override
public void onViewCreated(View view, Bundle savedInstanceState){

    view.setOnClickListener(new OnClickListener(){
        public void onClick(View v){

            /*  Do as you please here. */
        }
    });
}

Попробуй это. Это должно работать.

ИЗМЕНИТЬ:

Этот подход будет работать при условии, что вы используете ViewPager и PagerAdapter с Fragment и переопределяете метод onViewCreated() для Fragment.

person Y.S    schedule 21.02.2015
comment
Должен ли я добавить сюда какой-либо суперметод... что это такое... я получаю сообщение об ошибке как ....... The method onViewCreated(View, Bundle) of type AdptAtomicGodGallery must override or implement a supertype method - person Devrath; 21.02.2015
comment
Очистите и снова создайте свой проект. onViewCreated() является методом супертипа. - person Y.S; 21.02.2015
comment
для i/p [+1].... Кроме того, поскольку я использую активность, мне нужно использовать эту функцию в активности? - person Devrath; 21.02.2015
comment
Activity не имеет этого метода. Это строго для Fragment, принадлежащих вашему PagerAdapter :) - person Y.S; 21.02.2015
comment
О .... я использовал активность .... я действительно удивлен, что это невозможно в адаптере пейджера, так как это так легко сделать в списке - person Devrath; 21.02.2015
comment
:( ... Поскольку я использую активность, я не могу этого сделать ..... я пытался сделать onclick, как я разместил в ques ... до сих пор не нашел обходного пути для этого - person Devrath; 21.02.2015
comment
Ваш PagerAdapter держит коллекцию Fragment, верно? - person Y.S; 21.02.2015
comment
Если вы используете ViewPager с FragmentStatePagerAdapter и используете Fragment вместо ImageView, то приведенное выше решение будет работать. Я думал, вы все время использовали Fragments... onViewCreated() - это виртуальный метод Fragment :) - person Y.S; 21.02.2015
comment
@Devrath: куда ты продвинулся? - person Y.S; 02.03.2015
comment
Я нашел обходной путь для этого варианта использования, удалив эту опцию .... Но спасибо за информацию - person Devrath; 02.03.2015