2016-04-09 8 views
0

Von nicht funktioniert, ich meine, dass ich es nicht im ViewHolder sehen kann. getWidth() gibt einen Wert von 0.0 zurück.Android: getlayoutParams(). Breite gibt -1, und getWidth() gibt 0

Bearbeiten- Der Grund, dass ich nicht die Ansicht war sehen konnte, dass der ursprüngliche Anruf die Breite erhalten zurückkehrt 0

Ich habe eine Ansicht, die weit über eine bestimmte Klasse zu zeigen, die verwendet wird, wie jemand ist, wird wie folgt festgelegt:

  <View 
      android:id="@+id/timerBar" 
      android:layout_width="match_parent" 
      android:layout_height="4dp" 
      android:background="@color/colorPrimaryDark" /> 

im onBindViewHolder Methode, die ich bin, die folgenden-

gibt es die neue Breite und das aktuelle Layout zu tun

Einstellen der Breite des Layouts und Festlegen des Layouts der view-

holder.timerBar.setLayoutParams(lp); 
holder.timerBar.requestLayout(); 

Aufruf requestLayout() war etwas, das die Ansicht offenbar dazu führen können, zu aktualisieren, aber es hat nicht für mich gearbeitet .

Kann jemand vorschlagen, wie die Ansicht in der Recyclerview Viewholder erhalten, um seine Breite zu ändern?

Danke für jede Hilfe.

Antwort

2

Bitte legen Sie die Layoutparameter nicht manuell fest, es sei denn, Sie wissen, was Sie tun. Das Messen und Layout von Objekten innerhalb einer Recycler-Ansicht ist anders, da dies von einem Layout-Manager durchgeführt wird und Sie sollten dies nicht beeinflussen.

In Ihrem Fall für einen Fortschritt anzeigt, die Sie nur ein ProgressBar und/oder verwenden Sie eine ziehbar mit Clipping oder anderen Mitteln Fortschritte zu zeigen, verwenden sollten (es gibt einen viele verschiedene Optionen).

Dann können Sie einfach anrufen progress.setProgress(50); und fertig sein, ohne Ihr Layout und Ansichten zu manipulieren.

+0

Danke, das war ein Versehen meinerseits. Das funktioniert ganz gut. –