Динамически добавлять textViews к linearLayout - PullRequest
30 голосов
/ 07 мая 2011

Я читал это где-то здесь и полностью потерял его, но мог бы использовать некоторую помощь.

Мое приложение вытягивает имена столбцов из sqlite в массив.Я хочу создать текстовое представление и отредактировать текст для каждого (через размер массива), и я помню, как где-то читал, что вы можете трактовать имена переменных textViews как массив, но я не знаю, где это сейчас.

Так как бы мне динамически создать textView и editText для скольких списков в массиве?

Это было что-то вроде

TextView tv[] = new TextView()...

for(...){
tv[i]...
}

Это правильно?

Я ценю вашу помощь!

Ответы [ 6 ]

66 голосов
/ 07 мая 2011

Должно быть что-то вроде следующего:

final int N = 10; // total number of textviews to add

final TextView[] myTextViews = new TextView[N]; // create an empty array;

for (int i = 0; i < N; i++) {
    // create a new textview
    final TextView rowTextView = new TextView(this);

    // set some properties of rowTextView or something
    rowTextView.setText("This is row #" + i);

    // add the textview to the linearlayout
    myLinearLayout.addView(rowTextView);

    // save a reference to the textview for later
    myTextViews[i] = rowTextView;
}
12 голосов
/ 07 февраля 2014

Вы можете добавить TextView s во время выполнения, используя следующий код:

LinearLayout lLayout = (LinearLayout) findViewById(R.id.linearlayout2); // Root ViewGroup in which you want to add textviews
for (int i = 0; i < 5; i++) {
    TextView tv = new TextView(this); // Prepare textview object programmatically
    tv.setText("Dynamic TextView" + i);
    tv.setId(i + 5);
    lLayout.addView(tv); // Add to your ViewGroup using this method
}
3 голосов
/ 02 августа 2016

Использование ArrayList может помочь вам динамически добавлять любое количество TextView. Возможно, вы даже захотите удалить конкретный TextView из родительского линейного макета. Это эффективный способ памяти. Ниже приведен фрагмент.

ArrayList<TextView> mTextViewList = new ArrayList<>(); //empty list of TextViews

if(condition){ 
    /* can repeat several times*/

    //Create a temporary instance which will be added to the list
    final TextView mTextView = new TextView(this);

    //Add the instance to the ArrayList
    mTextViewList.add(mTextView);

    //Add view to the Parent layout in which you want to add your views
    mLinearLayout.addView(mTextView);
}

//Change the text of 6th(index:5) TextView which was added
mTextViewList.get(5).setText("My Text");

//Remove 2nd(index:1) TextView from the parent LinearLayout
mLinearLayout.removeView(mTextViewList.get(1));
3 голосов
/ 06 ноября 2012

Думаю, это будет полезно:

int j = 0;

context.getSystemService(Context.WINDOW_SERVICE);
WindowManager manager = (WindowManager) context
                        .getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();

for (int i = 0; i < tabsize; i++) {
    Tab tab = tabSet.get(i);
    if (i == selectedTabId)
        tab.setSelected(true);
    View view = tab.getView();

    TableRow.LayoutParams pCol = new TableRow.LayoutParams();
    pCol.width = display.getWidth() / tabSet.size();

    rowBottom.addView(view, pCol);
}
0 голосов
/ 17 февраля 2018

Для меня это решение.

// Установить переменные

TextView t;
ArrayList<TextView> textViewArrayList;
LayoutInflater layoutInflater;
LinearLayout ll_itensobrigatorios

// Рассказать в вашем onCreate

layoutInflater = getLayoutInflater();
createViewItem(new String[]{"Fabio", "Santos", "Programador", "Natal"});

// Это создать представление вмакет

    private void createViewItem(String[] nomes) {
            textViewArrayList = new ArrayList<>();

            for(int i = 0; i < nomes.length; i++) {
                View vll = layoutInflater.inflate(R.layout.nomes_tec_item, ll_itensobrigatorios, false);
                t = (TextView) vll.findViewById(R.id.txt_tec_item);
                textViewArrayList.add(t);
                ll_itensobrigatorios.addView(vll);
            }

            for(int i = 0; i < textViewArrayList.size(); i++) {
                textViewArrayList.get(i).setText((i + 1) + " - " + nomes[i]);
            }
}
0 голосов
/ 22 февраля 2017

Допустим, вы создали линейный макет внутри XML-файла, например:

<LinearLayout
    android:orientation="vertical"
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</LinearLayout>

теперь код для динамического добавления 5 видов текста

  LinearLayout linearLayout= (LinearLayout)findViewById(R.id.linear);      //find the linear layout
    linearLayout.removeAllViews();                              //add this too
    for(int i=0; i<5;i++){          //looping to create 5 textviews

        TextView textView= new TextView(this);              //dynamically create textview
        textView.setLayoutParams(new LinearLayout.LayoutParams(             //select linearlayoutparam- set the width & height
                ViewGroup.LayoutParams.MATCH_PARENT, 48));
        textView.setGravity(Gravity.CENTER_VERTICAL);                       //set the gravity too
        textView.setText("Textview: "+i);                                    //adding text
        linearLayout.addView(textView);                                     //inflating :)
    }
...