I am attempting to create multiple instances of a linearLayout. I created my layout file (Below). I put it in its own layout file and from another file (main_activity.xml) I would like to add a dynamic number of Linear Layout instances within a scroll view. I know that I can programatically create the same linearlayout in my java code and loop through it but I would rather not (for two main reasons)
Is it possible for me to keep my logic in java and then just dynamically create/instantiate multiple "instances" of my Linear layout. My guess is that there is a simple solution but my newbie status is clouding my ability to solve it. For some reason my java code can find the LinearLayout but is not able to find the first TextView(@+id/submittedBy).
Thank you very much, Craig
Java Logic
ScrollView sv = (ScrollView) findViewById(R.id.existingCommentsScrollView);
//DEBUGGING LOOP- REMOVE ME
for(int i=0;i<30;i++){
LinearLayout ll = (LinearLayout)findViewById(R.id.existingCommentLinearLayout);
TextView submittedByTextView = (TextView) findViewById(R.id.submittedBy);
submittedByTextView.setText("Craig " +i);
TextView submittedDate = (TextView) findViewById(R.id.dateField);
submittedDate.setText("SubmittedDate " +i);
RatingBar showRating = (RatingBar) findViewById(R.id.userShowRating);
showRating.setRating(3);
RatingBar soundRating = (RatingBar) findViewById(R.id.userSoundRating);
soundRating.setRating(1);
EditText commentText = (EditText) findViewById(R.id.userCommentEditText);
commentText.setText("THIS IS WHERE MY TEXT GOES FOR "+i+" I could add more too");
sv.addView(ll);
}
sv.refreshDrawableState();
Layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/linear_layout_border"
android:orientation="vertical"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:paddingBottom="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingTop="4dp"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<TextView
android:id="@+id/submittedBy"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:gravity="center_horizontal"
android:inputType="none"
android:paddingBottom="1dp"
android:paddingLeft="4dp"
android:paddingRight="10dp"
android:paddingTop="1dp"
android:text="NameGoesHere"
android:textColor="#E6E6E6"
android:textSize="8sp" />
<TextView
android:id="@+id/dateField"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/submittedBy"
android:ems="10"
android:paddingBottom="1dp"
android:paddingLeft="4dp"
android:paddingRight="10dp"
android:paddingTop="1dp"
android:text="DateGoesHere"
android:textColor="#E6E6E6"
android:textSize="8sp" />
</RelativeLayout>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:paddingBottom="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingTop="4dp"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<TextView
android:id="@+id/userShowRatingTextView"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:gravity="center_horizontal"
android:inputType="none"
android:paddingBottom="1dp"
android:paddingLeft="4dp"
android:paddingRight="10dp"
android:paddingTop="1dp"
android:text="Show Rating"
android:textColor="#E6E6E6"
android:textSize="8sp" />
<RatingBar
android:id="@+id/userShowRating"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/userShowRatingTextView" />
</RelativeLayout>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:paddingBottom="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingTop="4dp"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<TextView
android:id="@+id/userSoundRatingTextView"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toRightOf="@id/userShowRating"
android:gravity="center_horizontal"
android:inputType="none"
android:paddingBottom="1dp"
android:paddingLeft="4dp"
android:paddingRight="10dp"
android:paddingTop="1dp"
android:text="Sound Rating"
android:textColor="#E6E6E6"
android:textSize="8sp" />
<RatingBar
android:id="@+id/userSoundRating"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/userSoundRatingTextView" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000000"
android:inputType="none"
android:paddingBottom="4dp"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:paddingTop="4dp"
android:text="Comment Goes Here"
android:textColor="#E6E6E6"
android:textSize="12sp"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<requestFocus />
</EditText>
</RelativeLayout>
You don't run into any exception? I'm referring to the last line in the loop, where you add the LinearLayout
to the ScrollView
in each iteration. You're probably trying to inflate your layout file and then add it to the ScrollView
like below:
ScrollView sv = (ScrollView) findViewById(R.id.existingCommentsScrollView);
// I assume this LinearLayout is the only child of the ScrollView above
LinearLayout ll = (LinearLayout)findViewById(R.id.existingCommentLinearLayout);
for(int i=0;i<30;i++){
// R.layout.the_layout_file is your layout from the question
View inflatedView = getLayoutInflater().inflate(R.layout.the_layout_file, ll, false);
TextView submittedByTextView = (TextView) inflatedView.findViewById(R.id.submittedBy);
submittedByTextView.setText("Craig " +i);
TextView submittedDate = (TextView) inflatedView.findViewById(R.id.dateField);
submittedDate.setText("SubmittedDate " +i);
RatingBar showRating = (RatingBar) inflatedView.findViewById(R.id.userShowRating);
showRating.setRating(3);
RatingBar soundRating = (RatingBar) inflatedView.findViewById(R.id.userSoundRating);
soundRating.setRating(1);
EditText commentText = (EditText) inflatedView.findViewById(R.id.userCommentEditText);
commentText.setText("THIS IS WHERE MY TEXT GOES FOR "+i+" I could add more too");
ll.addView(inflatedView);
}
Also, keep in mind that you're adding a lot of views, something to avoid for a smooth interface.