我有一个布局,我希望通过以编程方式逐个添加项目来模仿列表视图。所以我为这些项目的布局创建了一个.xml,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_lista"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="1dp"
android:layout_marginTop="5dp"
android:layout_toLeftOf="@+id/rellay_btn"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="1dp"
android:text="Some name"
android:textColor="#3F3F3F"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/iv_follow"
android:text="Some text"
android:textColor="#3F3F3F"
android:textSize="13sp" />
</LinearLayout>
在活动中我想生成这个布局的n,用文本填充textviews,我也想在它们上设置一个onClickListener。 n是数组的大小。请帮忙
注意:活动加载后,布局数量不会改变,也不能删除布局。
这就是我现在所拥有的,但布局显示在活动的顶部,而不是在Textview下面:
LayoutInflater inflater = LayoutInflater.from(BucketProfileActivity.this);
for (int i = 0; i < 3; i++) {
View view = inflater.inflate(R.layout.bucketprofile_tips, null);
view.setId(i);
TextView tv_username = (TextView) view.findViewById(R.id.tv_username);
tv_username.setText(String.valueOf(i));
RelativeLayout.LayoutParams rl = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
rl.addRule(RelativeLayout.BELOW, R.id.tv_nemkell);
addContentView(view, rl);
}
答案 0 :(得分:0)
不确定为什么要这样做,但您可以使用LayoutInflater
来充气此视图的x并将其添加到指定的ViewGroup
。例如:
LayoutInflater inflater = LayoutInflater.from(context);
for (int i = 0; i < numberOfViews; i++) {
View v = inflater.inflate(R.layout.view_to_add, parentView, false);
setup(v);
parentView.addView(v);
}
其中setup()
是您定义的功能,可以执行设置工作,例如设置TextView
的文本等。
例如,在您的设置功能中可能看起来像这样:
private void setup(View v) {
TextView tv = (TextView) v.findViewById(R.id.name);
// set the text of the text view
tv.setText("Hello!");
// set the click listener for the view...
v.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// do stuff here...
}
});
}
答案 1 :(得分:0)
如果您发布的xml文件为bucketprofile_tips.xml
,那么您需要在此处更改
TextView tv_username = (TextView) view.findViewById(R.id.tv_title);
到
TextView tv_username = (TextView) view.findViewById(R.id.tv_username);
因为bucketprofile_tips.xml
找不到tv_title
TextView
。所以你得到Null Pointer Exception
。
答案 2 :(得分:0)
LinearLayout parentLayout=findViewById(R.id.parentLayout);
LayoutInflater inflater = LayoutInflater.from(BucketProfileActivity.this);
View view = inflater.inflate(R.layout.bucketprofile_tips, null);
parentLayout.addView(view);
LinearLayout textList=(LinearLayout) parentLayout.getChildAt(0);
for(int i=0; i<textList.getChildCount(); i++){
TextView tv_username=(TextView) textList.getChildAt(i);
textView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
tv_username.setText(String.valueOf(i));
}
}
}