【问题标题】:Get current position Pager Adapter onClickListener获取当前位置 Pager Adapter onClickListener
【发布时间】:2019-01-03 04:06:22
【问题描述】:

我的寻呼机适配器有问题。我在布局充气机中有一个ImageViewTextView。我的适配器将显示一些图像和图像的描述。我想在寻呼机上实现onClick,当我点击图片时,TextView 将显示/隐藏。

在我的 sn-p 代码下面:

private class MyAdapter extends PagerAdapter implements ViewPager.OnClickListener {
    private ArrayList<Bitmap> images;
    private LayoutInflater inflater;
    private Context context;
    private ViewPager viewPager;

    private TextView textViewDescription;
    private ImageView imageViewDescription;

    public MyAdapter(Context context, ArrayList<Bitmap> images, ViewPager viewPager) {
        this.context = context;
        this.images = images;
        this.viewPager = viewPager;
        inflater = LayoutInflater.from(context);
    }

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

    @Override
    public int getCount() {
        return images.size();
    }

    @Override
    public Object instantiateItem(ViewGroup view, final int position) {
        LayoutInflater inflater = (LayoutInflater) view.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View page = inflater.inflate(R.layout.item_image_preview, null);

        ImageView myImage = (ImageView) page.findViewById(R.id.imageView_preview);
        TextView textView= (TextView) page.findViewById(R.id.textView_image_description);

        textViewDescription = textView;
        imageViewDescription = myImage;

        imageDescription = arraydescription.get(position);

        textView.setText(arraydescription.get(position));
        myImage.setImageBitmap(images.get(position));

        page.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                if (isDescriptionVisible) {
                    textViewDescription.setVisibility(View.GONE);
                } else {
                    textViewDescription.setVisibility(View.VISIBLE);
                }
                isDescriptionVisible = !isDescriptionVisible;

                Log.i("TAG", "This page was clicked: " + position);
            }
        });

        ((ViewPager) view).addView(page, 0);
        return page;
    }

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

    @Override
    public void onClick(View v) {
        if (isDescriptionVisible) {
            textViewDescription.setVisibility(View.GONE);
        } else {
            textViewDescription.setVisibility(View.VISIBLE);
        }
        isDescriptionVisible = !isDescriptionVisible;
    }
}

问题是:如果位置 2 的寻呼机,我单击图像,位置 2 的TextView 将显示/隐藏。但是当我滑入位置 1 并单击图像时,显示/隐藏的 TextView 仍位于位置 2。它就像我可以处理的只有一个位置。我读了a question about this example,但它仍然无法正常工作。

【问题讨论】:

  • textViewDescriptionimageViewDescription 定义在哪里?发布整个代码。
  • 使用 page.setTag(imageDescriptionVisible ) 然后在 onClick boolean isImgDesc=(boolean)v.getTag() 中,不要将位置设为最终位置
  • @ADM 它在适配器上定义为私有。我有 1300 行,所以我明智地编辑了代码。等一下*看看我的编辑
  • @Rahul 好的,我会试试的。谢谢

标签: android android-viewpager


【解决方案1】:

您需要保存每个页面的状态。试试下面的代码。我已将状态设置为标记。

 public Object instantiateItem(ViewGroup view, final int position) {
    LayoutInflater inflater = (LayoutInflater) view.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View page = inflater.inflate(R.layout.item_image_preview, null);
    final ImageView myImage = (ImageView) page.findViewById(R.id.imageView_preview);
    final TextView textView= (TextView) page.findViewById(R.id.textView_image_description);
    imageDescription = arraydescription.get(position);
    textView.setText(arraydescription.get(position));
    myImage.setImageBitmap(images.get(position));
    page.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v){
            boolean isVisible=textView.getTag()==null?true:(boolean)textView.getTag();
            if (isVisible) {
                textView.setVisibility(View.GONE);
            } else {
                textView.setVisibility(View.VISIBLE);
            }
            textView.setTag(!isVisible);
            Log.i("TAG", "This page was clicked: " + position);
        }
    });
    ((ViewPager) view).addView(page, 0);
    return page;
}

【讨论】:

  • 哇,我尝试了@Rahul 解决方案,它的工作原理和你的代码一样。解释清楚,谢谢提前
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 2011-07-15
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多