具有相同ID /标记的多个TextView

时间:2013-02-26 07:21:08

标签: android android-layout textview android-viewpager findviewbyid

我有ViewPager可以浏览多张全屏照片。每张照片都有一个与ImageView合并的TextView标题。我正在尝试根据点击操作隐藏/显示照片上的TextView标题。

问题:目前我正在使用findViewById()TextView的每个页面中查找ViewPager,因为有多个照片/标题共享相同的布局,它只返回第一个TextView ID,因此隐藏/显示功能仅适用于第一张照片标题,但不适用于其余照片。

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

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您向PageListener添加ViewPager,则可以选择当前视图。 这样您就可以在当前页面中获取TextView

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

答案 1 :(得分:0)

我做到了!方法如下:

  1. 在每个ViewPager内都有一个片段,通常包含一个ImageView,它是它的主要View组件。
  2. 由于我已经跟踪了每个片段中的ImageView OnClickListener并传回了活动,因此我在活动中有一个OnClick(View v)方法。
  3. OnClick(View v)中,我使用(View) getParent()获取当前ImageView的父视图以获取ViewPager父容器(当前页面)。
  4. 获得父视图后,您可以使用(TextView) parent.findViewById()
  5. 找到其子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);
        ...
    

    完成!

答案 2 :(得分:0)

您可以通过以下方式为视图设置标记:

textView.setContentDescription("MyTag");

然后,为了找到所有带有该标记的视图,您需要调用:

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