2016-02-16 61 views
0

我正在嘗試爲變化的數組中的每個項目添加LinearLayout。我需要每個項目都有水平的圖像和文本,但現在我正在測試文本。以文本和圖像編程方式添加LinearLayout

牢記這段代碼是一個片段。

我認爲錯誤是使用getContext(),但不肯定。

我目前擁有的代碼是:

List<PaymentOption> paymentOptions = aTradeItem.getPaymentOptions(); 

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 
    lp.setMargins(ImageUtils.dpToPx(16), ImageUtils.dpToPx(4), ImageUtils.dpToPx(16), ImageUtils.dpToPx(4)); 

    LinearLayout.LayoutParams lineparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ImageUtils.dpToPx(1)); 
    lineparams.setMargins(0, ImageUtils.dpToPx(4), 0, ImageUtils.dpToPx(4)); 

    if (paymentOptions != null && paymentOptions.size() > 0) { 
     for (PaymentOption t : paymentOptions) { 
     LinearLayout paymentOptionLayout = new LinearLayout(getContext()); 
     paymentOptionLayout.setOrientation(LinearLayout.HORIZONTAL); 
     paymentOptionLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)); 

     TextView heading = new TextView(getContext()); 
     heading.setText(t.getDescription()); 
     heading.setTextColor(getResources().getColor(R.color.light_text)); 
     heading.setLayoutParams(lp); 

     paymentOptionLayout.addView(heading); 

     } 
    } 

有沒有錯誤,該數據只是不填充屏幕上。我曾嘗試在setText()中對隨機文本進行硬編碼,但沒有成功。

謝謝

+1

在for循環之後,您是否在佈局中添加了paymentOptionLayout? – Luksprog

+0

我不知道爲什麼我最初沒有想到這個,但是RecyclerView會更好,因此開銷更少。所以我會去看看那個。感謝這個問題,儘管@Luksprog – x10sion

回答

1

你不增加你的paymentOptionLayout到被設置爲你的內容視圖的佈局。基本上你正在做的是以編程方式創建佈局,但隨後無所作爲。

默認情況下你的activity_main.xml中的文件將取決於您如何設置代碼想出一些類型的佈局,例如空活動的xml文件將

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context=".MainActivity" 
android:id="@+id/RelativeLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"/> 

然而,當你創建佈局以編程的方式你做了,你必須將它們追加到你的XML文件中父佈局的佈局。 所以我認爲你需要做的是以下。

RelativeLayout rl=(RelativeLayout)findViewById(R.id.RelativeLayout); //getting the view from the xml file. Keep in mind that the id is defiend in the xml file by you 
List<PaymentOption> paymentOptions = aTradeItem.getPaymentOptions(); 

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT); 
lp.setMargins(ImageUtils.dpToPx(16), ImageUtils.dpToPx(4), ImageUtils.dpToPx(16), ImageUtils.dpToPx(4)); 

LinearLayout.LayoutParams lineparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ImageUtils.dpToPx(1)); 
lineparams.setMargins(0, ImageUtils.dpToPx(4), 0, ImageUtils.dpToPx(4)); 

if (paymentOptions != null && paymentOptions.size() > 0) { 
    for (PaymentOption t : paymentOptions) { 
    LinearLayout paymentOptionLayout = new LinearLayout(getContext()); 
    paymentOptionLayout.setOrientation(LinearLayout.HORIZONTAL); 
    paymentOptionLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT)); 

    TextView heading = new TextView(getContext()); 
    heading.setText(t.getDescription()); 
    heading.setTextColor(getResources().getColor(R.color.light_text)); 
    heading.setLayoutParams(lp); 

    paymentOptionLayout.addView(heading); 
    rl.addView(paymentOptionLayout); //adding the view to the parent view 
    } 
} 

請注意,從您的代碼的外觀,你真的只是重新實現listView這是一個可用的佈局在Android中。我想你應該看看那個。

相關問題