2016-09-27 2 views
4

Ich entwickle ein benutzerdefiniertes Layout, das nur wenige Attribute hat. Attrs:Der beste Weg, um Ansichten zu füllen

<declare-styleable name="CustomLayout"> //other attr... <attr name="data_set" format="reference"/> </declare-styleable>

Datensatz ist nur ein String-Array, wonach fülle ich mein Layout von bevöl Ansichten:

private Option[] mOptions; // just an array for filing content 

public CustomLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    TypedArray array = context 
      .obtainStyledAttributes(attrs, R.styleable.CustomLayout); 
    int arrayId = array.getResourceId(R.styleable._data_set, -1); 
    if (arrayId != -1) { 
     array = getResources().obtainTypedArray(arrayId); 
     mOptions = new Option[array.length()]; 
     for (int index = 0; index < array.length(); index++) { 
      mOptions[index] = new Option(); 
      mOptions[index].setLabel(array.getString(index)); 
     } 
     populateViews(); 
    } 

    array.recycle(); 
} 

private void populateViews() { 
    if (mOptions.length > 0) { 
     for (int index = 0; index < mOptions.length; index++) { 
      final Option option = mOptions[index]; 
      TextView someTextView = (TextView) LayoutInflater.from(getContext()) 
        .inflate(R.layout.some_layout, this, false); 
      //other initialization stuff 
      addView(someTextView); 
     } 
    } 

Wo ist der beste Platz für Ansichten bevölkern? Wie ich weiß addView() löst requestLayout() und invalidate() - und das ist nicht der beste Weg, dies für mehrere Elemente zu tun, nicht wahr? Also, was soll ich tun, sollte ich Adapter-basierten Ansatz verwenden?

Antwort

2

THats eigentlich gut. Es fordert ein Layout an, aber das Layout wird nicht sofort ausgeführt. Es sendet im Grunde eine Nachricht an den Handler, dass ein Layout benötigt wird. Gleiches gilt für ungültig. Daher wird das tatsächliche Layout erst dann ausgeführt, wenn der Benutzeroberflächen-Thread wieder im Looper ist. Das bedeutet, wenn Sie eine Reihe von Elementen in einer Zeile hinzufügen, wird nur einmal tatsächlich ein Layout erstellt.

+0

Also, auch wenn ich etwas wie ListView implementieren werde, wo ich bekommen werde Sicht innen onMeasure() - das ist nicht meine aktuelle Implementierung zu optimieren? Oder vielleicht können Sie andere Ansätze empfehlen? –

Verwandte Themen