Многострочный вид с неравномерными столбцами, данные от адаптера

Я пытаюсь создать представление, которое будет брать данные из адаптера и распределять их рядом друг с другом в строках. Вид должен полагаться на свою ширину, чтобы решить, когда помещать элементы в следующую строку. Пожалуйста, взгляните на иллюстрацию того, чего я пытаюсь достичь.

http://i43.tinypic.com/2w327bq.png

Я нашел здесь отличный код: Android - многострочный линейный макет. Он генерирует линейные макеты динамически (помещает горизонтальные макеты внутри вертикального макета). Однако я хотел бы сохранить все эти данные в едином представлении и установить для него адаптер. Буду благодарен за любые предложения, как этого добиться.

Фрагмент кода из цитируемой темы:

/**
 * Copyright 2011 Sherif 
 * Updated by Karim Varela to handle LinearLayouts with other views on either side.
 * @param linearLayout
 * @param views : The views to wrap within LinearLayout
 * @param context
 * @param extraView : An extra view that may be to the right or left of your LinearLayout.
 * @author Karim Varela
 **/
private void populateViews(LinearLayout linearLayout, View[] views, Context context, View extraView)
{
 extraView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

// kv : May need to replace 'getSherlockActivity()' with 'this' or 'getActivity()'
Display display = getSherlockActivity().getWindowManager().getDefaultDisplay();
linearLayout.removeAllViews();
int maxWidth = display.getWidth() - extraView.getMeasuredWidth() - 20;

linearLayout.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams params;
LinearLayout newLL = new LinearLayout(context);
newLL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
newLL.setGravity(Gravity.LEFT);
newLL.setOrientation(LinearLayout.HORIZONTAL);

int widthSoFar = 0;

for (int i = 0; i < views.length; i++)
{
    LinearLayout LL = new LinearLayout(context);
    LL.setOrientation(LinearLayout.HORIZONTAL);
    LL.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
    LL.setLayoutParams(new ListView.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    views[i].measure(0, 0);
    params = new LinearLayout.LayoutParams(views[i].getMeasuredWidth(), LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 0, 5, 0);

    LL.addView(views[i], params);
    LL.measure(0, 0);
    widthSoFar += views[i].getMeasuredWidth();
    if (widthSoFar >= maxWidth)
    {
        linearLayout.addView(newLL);

        newLL = new LinearLayout(context);
        newLL.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        newLL.setOrientation(LinearLayout.HORIZONTAL);
        newLL.setGravity(Gravity.LEFT);
        params = new LinearLayout.LayoutParams(LL.getMeasuredWidth(), LL.getMeasuredHeight());
        newLL.addView(LL, params);
        widthSoFar = LL.getMeasuredWidth();
    }
    else
    {
        newLL.addView(LL);
    }
}
linearLayout.addView(newLL);
}

person Wojtek    schedule 03.07.2013    source источник
comment
Найдите Android FlowLayout в Google.   -  person Karakuri    schedule 03.07.2013
comment
@Karakuri, спасибо - я нашел эту библиотеку: github.com/ApmeM/android-flowlayout, которая довольно близко к тому, что я искал   -  person Wojtek    schedule 04.07.2013