如何访问GridView的所有子元素?

时间:2017-07-25 10:07:06

标签: android gridview

我有一个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元素并迭代它们?因为我没有提及它们。

1 个答案:

答案 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,它有一些方便的方法,如getFirstVisiblePositiongetLastVisiblePositiongetItemAtPosition,我会考虑使用它们来获取数据(目前可见的)文本视图如下:

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
}