2

我有一个ViewPager,可以滑过多个全屏幕照片。每张照片都有一个标题ImageViewTextView合并。我试图根据点击操作隐藏/显示照片上的TextView标题。具有相同ID /标记的多个TextViews

问题:我目前使用findViewById()找到ViewPager的每个页面内TextView,因为有多个照片/字幕共享相同的布局,它只是返回的第一个TextView ID,从而隐藏/显示功能仅适用于第一张照片标题,而不适用于其他部分。

问题:我如何让它适用于所有TextView的?

谢谢!

+0

发布一些会让我们很好地理解你的问题。 – GrIsHu 2013-02-26 07:27:59

+0

@Grishu说实话,并没有试图表示什么,这不是一个调试问题。如果你阅读OP,这更像是一个'如何做'的问题。我可以发布代码,但它只是'onClick()'函数中'findViewById'的几条典型行。谢谢。 – jerrytouille 2013-02-26 07:40:09

+0

做一件事情为图像和文字视图(为其标题)做一个单独的布局,并将它们包含到您的不同viewpager布局。这将帮助你制作单身证件。检查这个并让我知道它是否解决了你的问题 – 2013-02-26 10:48:33

回答

0

我做到了!方法如下:

  1. 在每个ViewPager中都有一个片段,通常包含一个ImageView,它是其主View组件。
  2. 因为我已经跟踪了每个片段中的ImageView OnClickListener并传回到Activity,所以我在Activity中有一个OnClick(View v)方法。
  3. OnClick(View v)中,我使用(View) getParent()获取当前ImageView的父视图以获取当前页面的ViewPager父容器。
  4. 一旦你获得了父视图,您可以使用(TextView) parent.findViewById()

奖金找到其子的TextView ID:代码:

public void onClick(View v) { 
      // since each pager includes an ImageView and a TextView 
      // get the current pager which is the parent of the current ImageView 
      View currentPage = (View) v.getParent(); 
      // find the TextView within the current page 
      mCaption = (TextView) currentPage.findViewById(R.id.caption); 
    ... 

完成!

0

如果您将PageListener添加到ViewPager,则可以获取当前选择的视图。 这将使您能够获取当前页面中的TextView

检查this问题和接受的答案,以了解如何实施PageListener

+0

我试过这个,但问题是虽然我有效地管理了ViewPager中每个视图的位置,但视图本身的ID不会改变,它们都具有相同的ID。因此,当我通过id选择视图并隐藏它时,只有第一个工作。 – jerrytouille 2013-03-01 01:41:01

0

您可以设置标签,您的意见是这样的:

textView.setContentDescription("MyTag"); 

然后,以便找到与该标记你需要调用所有的观点:

ArrayList<View> outputViews = new ArrayList<>(); 
mViewPager.findViewsWithText(outputViews, "MyTag", FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
相关问题