如何访问每个网格视图项的特定元素

时间:2012-01-20 16:07:22

标签: android android-gridview

我有一个gridview,其每个项目中有两个元素,第一个是图像,第二个是标题,标题在启动应用程序时不可见,但我在网格外有一个按钮查看当我点击它时,我想更改项目标题的可见性变得可见,我的问题是我无法访问网格视图中每个项目的每个标题。当我在活动中的独立按钮的onClick方法中设置标题(TextView)的可见性时,它仅更改网格视图中第一个项目的可见性!

这个草图代表我的界面,所以标题在开头是不可见的,但当我点击“SetVisibilityButton”时,我想将它们设置为Visible:

    Image1    Image2      Image3
    Title1    Title2      Title3

    Image4    Image5      Image6
    Title4    Title5      Title6

    Image7    Image8      Image9
    Title7    Title8      Title9


    ----------------------------
    SetVisibilityButton
    ____________________________        

我在oncreate()活动中设置了网格视图:

    favorGrid = (GridView) findViewById(R.id.favorGrid);
    favorGrid.setAdapter(adapter);

在我的ImageAdapter类中,这是我的getView()方法:

          @Override
       public View getView(int position, View convertView, ViewGroup parent) 
       {
          View MyView = convertView;

           /*we define the view that will display on the grid*/

             //Inflate the layout
             LayoutInflater li = getLayoutInflater();
             MyView = li.inflate(R.layout.favor_item, null);

             // Add The Text!!!
             TextView tv = (TextView)MyView.findViewById(R.id.title);
             tv.setText(mTitles[position]);

             // Add The Image!!!           
             ImageView iv = (ImageView)MyView.findViewById(R.id.favor_item_image);
             iv.setImageResource(mThumbIds[position]);
          return MyView;
       }

为了从我的主要活动中获取标题文本视图并设置其可见性,我尝试了:

    TextView title = (TextView) findViewById(R.id.title);
    title.setVisibility(View.VISIBLE);

并尝试:

     // gv is the gridview (R.id.gridview)
     TextView title = (TextView)gv.findViewById(R.id.title);
     title.setVisibility(View.VISIBLE);

并尝试:

      LinearLayout layout = (LinearLayout) findViewById(R.id.gridLayout);
      TextView title = (TextView)layout.findViewById(R.id.title);
      title.setVisibility(View.VISIBLE);

但是所有这些解决方案都只为网格视图中的第一个元素设置了可见性。

我花了很多时间解决这个问题,但我还没有找到解决方案,是否有人可以帮我修复它 提前谢谢你

2 个答案:

答案 0 :(得分:28)

这很简单:

GridView mGridView (Your object instance)

final int size = mGridView.getChildCount();
for(int i = 0; i < size; i++) {
  ViewGroup gridChild = (ViewGroup) mGridView.getChildAt(i);
  int childSize = gridChild.getChildCount();
  for(int k = 0; k < childSize; k++) {
    if( gridChild.getChildAt(k) instanceof TextView ) {
      gridChild.getChildAt(k).setVisibility(View.GONE);
    }
  }
}

答案 1 :(得分:4)

获取特定位置的listView视图的正确方法是下一个:

View viewItem = list.getChildAt(position);
if (viewItem != null) {                 
   TextView text = (TextView) viewItem.findViewById(R.id.item);
}