I read this somewhere here and I totally lost it, but could use some assistance.
My app is pulling the column names from sqlite into an array. I want to create a tex
Using ArrayList may help you add any number of TextViews dynamically. You may even want to delete a specific TextView from the parent linear layout. This is a memory efficient way. Following is a snippet.
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));
You can add TextView
s at runtime by following code below:
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
}
For me this is a solution.
// Set Variables
TextView t;
ArrayList<TextView> textViewArrayList;
LayoutInflater layoutInflater;
LinearLayout ll_itensobrigatorios
// Tell in your onCreate
layoutInflater = getLayoutInflater();
createViewItem(new String[]{"Fabio", "Santos", "Programador", "Natal"});
// This create view in layout
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]);
}
}
So lets say you have created a linearlayout inside a .xml file like this:
<LinearLayout
android:orientation="vertical"
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
now the code to add 5 textviews dynamically
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 :)
}
I think this will be useful:
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);
}
Something like the following should be what you need:
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;
}