web-dev-qa-db-de.com

Fügen Sie einem linearLayout dynamisch textViews hinzu

Ich habe das hier irgendwo gelesen und habe es total verloren, könnte aber Hilfe gebrauchen.

Meine App zieht die Spaltennamen von SQLite in ein Array. Ich möchte eine Textansicht erstellen und Text für jede (über die Größe des Arrays) bearbeiten, und ich erinnere mich, dass ich irgendwo gelesen habe, dass Sie die textViews-Variablennamen wie ein Array behandeln können, aber ich weiß nicht, wo das jetzt ist.

Wie würde ich also dynamisch eine textView und editText für so viele Einträge in einem Array erstellen?

Es war so etwas wie

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

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

Ist das richtig?

Ich schätze Ihre Hilfe!

30

Etwas wie das Folgende sollte das sein, was du brauchst:

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;
}
68
Joseph Earl

Sie können TextViews zur Laufzeit mit folgendem Code hinzufügen:

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
}
12
jayrhd

Mithilfe von ArrayList können Sie möglicherweise beliebig viele TextViews dynamisch hinzufügen. Möglicherweise möchten Sie sogar eine bestimmte Textansicht aus dem übergeordneten linearen Layout löschen. Dies ist ein speichereffizienter Weg. Es folgt ein Ausschnitt.

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
backslashN

Ich denke, das wird nützlich sein:

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);
}
3
Jabbir Basha

Für mich ist das eine Lösung.

// Variablen setzen

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

// Sagen Sie in Ihrem onCreate

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

// Diese Ansicht im Layout erstellen

    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
Programador

Nehmen wir an, Sie haben ein lineares Layout in einer XML-Datei wie folgt erstellt:

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

jetzt den code um 5 textviews dynamisch hinzuzufügen

  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 :)
    }
0