2017-07-25 4 views
-1

Ich habe eine GridView zeigt Elemente von "Symbol mit Text-Overlay". Bei einem bestimmten Ereignis möchte ich alle diese Elemente durchlaufen und den Text ändern. Aber wie kann ich einen Verweis auf diese Artikel außerhalb einer OnItemClickListener bekommen?Wie auf alle untergeordneten Elemente eines GridView zugreifen?

Kann ich irgendwie etwas ausführen wie: view.findAllViewById(R.id.itemtext);? Ich weiß, dass findAll() nicht existiert.

item_view.xml:

<RelativeLayout> 
    <ImageView /> 
    <TextView android:id="@+id/itemtext" /> 
</RelativeLayout> 

main.xml:

<LinearLayout> 
    <GridView android:id="@+id/simpleGridView" /> 
</LinearLayout> 

-Code.

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"); 
    } 
}); 

Frage: Wie kann ich Zugriff auf alle verfügbaren R.id.itemtext Elemente und durch sie durchlaufen? Weil ich keinen Bezug zu ihnen habe.

+0

Was Sie tun möchten, wenn Sie bekommen alle Textansicht ref? –

+0

Benachrichtigen Sie Ihren Adapter, dies zu tun –

Antwort

1

1. Kind sieht

Wenn Ihr wirklich die R.id.itemtext Ansichten zugreifen möchten könnten Sie wahrscheinlich die GridView als ViewGroup verwenden (es reicht es), seine Kinder iterieren und findViewById(R.id.itemtext) für jeden von ihnen:

auch
for (int i = 0; i < grid.getChildCount(); i++) { 
    View child = getChildAt(i); 
    View itemText = child.findViewById(R.id.itemtext); 
    ... 
} 

2. Adapter Artikel

Aber ist Gridview ein AdapterView und es hat einige praktische Methoden wie getFirstVisiblePosition, getLastVisiblePosition und getItemAtPosition und ich hielte sie bekommen, die Daten in der (zur Zeit sichtbar) Textansichten wie folgt aus:

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 
} 
Verwandte Themen