Android:以编程方式将多个视图添加到线性布局

时间:2013-02-18 15:15:42

标签: android android-edittext android-linearlayout android-view dynamically-generated

我不知道如何处理。我需要线性布局,需要有20多个TextView和EditText组件。我可以在顶部定义ImageView和按钮,但我不知道如何生成下面的其余组件,然后在最后放置一个按钮。

看起来像这样:

---Button-----Button-------

--------ImageView----------

TextView -------- EditText

Item1.............[-------]

Item2.............[-------]

Item3.............[-------]

Item4.............[-------]

.

.

.

------------Button------------

实际上会有很多组件,所以我想避免在XML中手动定义所有组件。单击按钮后,所有组件都需要成对保存“name”:“value”(“Item1”:“EditText value”)。我有一个项目名称列表,用户将写入这些项目的值并将它们保存到JSON文件。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

你必须实现这样的类。

public class DetailedTicketSystemView extends LinearLayout 
{
    static int inc = 100;
    ArrayList<XmlScommessaInCorso> _viewData;
    ArrayList<xmlSistemaMovimenti> _systems;
    Context _context;

    public DetailedTicketSystemView(Context context, int res, AttributeSet attrs, ArrayList<XmlScommessaInCorso> viewData, ArrayList<xmlSistemaMovimenti> systems) 
    {
        super(context, attrs);

        _context = context;
        _viewData = viewData;
        _systems = systems;

        LayoutInflater.from(context).inflate(res, this, true);
        setId(inc);
        inc++;

        setLayout();
    }

    private void setLayout()
    {
        TextView textView;
        String text;

        for (int i = 0; i < _systems.size(); i++)
        {       
            View quotesView = (View) LayoutInflater.from(_context).inflate(R.layout.row_ticket_detail_system_layout, null, true);
            quotesView.setId(i);

            // System Id
            textView = (TextView) quotesView.findViewById(R.id.systemId);
            text = "" + _context.getString(R.string.id_sistema) + " " + _systems.get(i).getAttributeOrVoidString(xmlSistemaMovimenti.ATTR_id) +
                    " / " + _viewData.size();
            textView.setText(text);

            // System Columns
            textView = (TextView) quotesView.findViewById(R.id.systemColumns);
            text = "" + _context.getString(R.string.colonne) + " " + _systems.get(i).getAttributeOrVoidString(xmlSistemaMovimenti.ATTR_n_multiple_sis);
            textView.setText(text);

            // System Bet Text
            textView = (TextView) quotesView.findViewById(R.id.systemBetText);
            textView.setText(R.string.importoPerColonna);

            // System bet Value
            textView = (TextView) quotesView.findViewById(R.id.systemBetValue);
            text = "€ " + XmlScommessaInCorso.getQuotaFormattedOrVoid(_systems.get(i).getAttributeOrVoidString(xmlSistemaMovimenti.ATTR_impo_sistema));
            textView.setText(text);


            LinearLayout primaryLayout = (LinearLayout) findViewById(R.id.primaryLayout);
            primaryLayout.addView(quotesView);
        }
    }
}