2016-12-12 4 views
0

Ich möchte alle Bildansichten in einem relativen Layout in Android Studio entfernen, speichern und später ersetzen.Wie kann man prüfen, ob ein Objekt ein Imageview ist?

RelativeLayout rl = (RelativeLayout) findViewById(R.id.relativeLayout); 
ArrayList al = rl.getTouchables(); 
rl.removeAllViews(); 
//do something 
for(int i=0; i<al.size(); i++) 
{ 
if(al.get(i).equals(new ImageView(this))) 
rl.addView((ImageView) al.get(i)); 
} 

Das Programm funktioniert nicht :(

+5

instanceof? ref: http://stackoverflow.com/questions/7313559/what-ist-instanceof-operator-used-for –

Antwort

2

Finden Sie alle Bildansichten im Viewgroup instanceof verwenden. Sobald Sie sie alle haben, die Bilder aus dem Viewgroup entfernen. Tun, was Sie können dann arbeiten Sie brauchen auf diesen Bildern zu tun:

final ViewGroup vg = (ViewGroup) findViewById(R.id.relativeLayout); 
final List<ImageView> images = new ArrayList<>(); 
for(int i = 0; i < vg.getChildCount(); i++) { 
    final View v = vg.getChildAt(i); 
    if (v instanceof ImageView) { 
     images.add((ImageView) v); 
    } 
} 
for (final ImageView v : images) { 
    vg.removeView(v); 
} 

Wenn Java 8 herum rollt denke ich wir in der Lage, so etwas zu tun wäre:

final ViewGroup vg = (ViewGroup) findViewById(R.id.relativeLayout); 
final List<ImageView> images = IntStream() 
    .range(0, vg.getChildCount()) 
    .mapToObj(vg::getChildAt) 
    .filter(ImageView.class::isInstance) 
    .map(ImageView.class::cast) 
    .collect(Collectors.toList()); 
images.stream().forEach(vg::removeView); 
Verwandte Themen