我有一个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);
但是所有这些解决方案都只为网格视图中的第一个元素设置了可见性。
我花了很多时间解决这个问题,但我还没有找到解决方案,是否有人可以帮我修复它 提前谢谢你
答案 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);
}