[英]Programmatically create multiple LinearLayouts
我正在嘗試創建linearLayout的多個實例。 我創建了布局文件(如下)。 我將其放在其自己的布局文件中,並從另一個文件(main_activity.xml)中將其添加到滾動視圖中的動態數量的Linear Layout實例中。 我知道我可以在Java代碼中以編程方式創建相同的linearlayout並循環遍歷,但我寧願不這樣做(有兩個主要原因)
我有可能將自己的邏輯保留在java中,然后僅動態創建/實例化Linear布局的多個“實例”。 我的猜測是,有一個簡單的解決方案,但我的新手身份正在模糊我的解決能力。 由於某種原因,我的Java代碼可以找到LinearLayout,但找不到第一個TextView(@ + id / submittedBy)。
非常感謝你,克雷格
Java邏輯
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();
布局:
<?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>
你沒有遇到任何例外嗎? 我指的是循環的最后一行,您在每次迭代中將LinearLayout
添加到ScrollView
中。 您可能正在嘗試填充布局文件,然后將其添加到ScrollView
如下所示:
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);
}
另外,請記住,您要添加很多視圖,這是避免平滑界面所要避免的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.