我有一个GridView
显示带有文字叠加"的"图标项目。
在特定事件上,我想迭代所有这些项并更改文本。但是,我怎样才能获得OnItemClickListener
以外的那些项目的参考?
我可以以某种方式执行以下操作:
view.findAllViewById(R.id.itemtext);
?我知道findAll()不存在。
item_view.xml:
<RelativeLayout>
<ImageView />
<TextView android:id="@+id/itemtext" />
</RelativeLayout>
main.xml中:
<LinearLayout>
<GridView android:id="@+id/simpleGridView" />
</LinearLayout>
代码。
GridView grid = (GridView) findViewById(R.id.simpleGridView);
grid.setAdapter(..); //inside adapter: inflates the items by R.layout.item_view
grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView item = ((TextView) view.findViewById(R.id.itemtext));
item.setText("some click text");
}
});
问题:如何访问所有可用的R.id.itemtext
元素并迭代它们?因为我没有提及它们。
答案 0 :(得分:1)
<强> 1。儿童观点
如果您真的想要访问R.id.itemtext
次观看,则可以使用GridView
作为ViewGroup
(扩展它),迭代其子级和findViewById(R.id.itemtext)
他们每个人:
for (int i = 0; i < grid.getChildCount(); i++) {
View child = getChildAt(i);
View itemText = child.findViewById(R.id.itemtext);
...
}
<强> 2。适配器项目
但GridView也是AdapterView,它有一些方便的方法,如getFirstVisiblePosition
,getLastVisiblePosition
和getItemAtPosition
,我会考虑使用它们来获取数据(目前可见的)文本视图如下:
int first = grid.getFirstVisiblePosition();
int last = grid.getLastVisiblePosition();
for(int i=first; i<=last; ++i){
Object item = grid.getItemAtPosition(); // You should probably cast to your adapter's item type
}