2014-12-04 82 views
0

我有一個佈局,我想模仿一個列表視圖通過編程添加項目一個在另一個之下。所以,我創建了這些項目是像這樣的佈局的.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

只是想知道,但爲什麼會使用ListView不夠? – idunnololz 2014-12-04 22:30:53

+0

因爲這是一個相當複雜的滾動視圖佈局 – erdomester 2014-12-04 22:43:22

+0

你能不能在for循環中使用'LayoutInflater.inflate()'所需的次數。初始化\設置每個佈局並將其添加到所需的視圖? – idunnololz 2014-12-04 23:30:11

回答

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... 
     } 
    }); 
} 
+0

我仍然不知道如何到我想要的。什麼是parentView?如何在視圖上設置onclicklistener? – erdomester 2014-12-05 07:29:13

+0

'parentView'是您希望添加視圖到的'ViewGroup'。這通常是一個'LinearLayout'。我已經更新了答案,以顯示如何設置視圖的「OnClickListener」的示例。 – idunnololz 2014-12-05 19:44:40

0

如果您發佈的XML文件bucketprofile_tips.xml則需要從

這裏改變

TextView tv_username = (TextView) view.findViewById(R.id.tv_username); 

由於bucketprofile_tips.xmltv_title ID找不到你TextView。所以你得到Null Pointer Exception

+0

這只是一個錯誤,在xml中有一個tv_username,這個答案不是我的問題的解決方案 – erdomester 2014-12-05 08:14:07

+0

嘗試從LayoutInflater中更改此inflater = LayoutInflater.from(BucketProfileActivity.this);到LayoutInflater inflater = getLayoutInflater();而且我已經在我的第一行中指定了此解決方案。 – Piyush 2014-12-05 08:33:49

+0

感謝您的幫助,但事實並非如此。請參閱我更新的帖子。 – erdomester 2014-12-05 08:38:57