2013-08-03 117 views
1

我想添加元素到一個LinearLayout UI已經成功地在一個片段的onCreateView()方法膨脹。動態添加一個元素數組到一個UI

下面是onActivityCreated()方法,我試圖在UI中添加更多元素。

用戶界面爲體積計算提供輸入,但我不知道在運行時需要多少維來計算體積。維數由我的VolumeCalculation類提供,具體取決於calcId

在調試,在循環應用程序崩潰只要我嘗試在dimHLayouts [dimNumber]中設置任何東西(例如dimHLayouts [dimNumber] .setId(100 + dimNumber);)。我試着先交換我設置的屬性。無論我嘗試首先設置哪個屬性,只要嘗試設置屬性,就會發生此故障。

我也用了android.util.Log工具,插入一噸原木的嘗試,看看發生了什麼事情,但我仍然處於虧損狀態,因爲一切都到這一點,似乎按預期工作。任何幫助將不勝感激。

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 

    // Get the volume Calculation Type from the bundle passed to this fragment 
    Bundle bundle = this.getArguments(); 
    int calcId = bundle.getInt("CalcType"); 

    // Create a calculation object 
    VolumeCalculation calc = new VolumeCalculation(ApplicationContextProvider.getContext()); 
    int calcDimensionCount = calc.getCalcDimensionCount(calcId); 

    // Get the root LinearLayout of the inflated UI 
    LinearLayout inputUILayout = (LinearLayout)view.findViewById(R.id.layout_input); 

    // Create array of new LinearLayout objects 
    LinearLayout[] dimHLayouts = new LinearLayout[calc.getCalcDimensionCount(calcId)]; 
    LinearLayout.LayoutParams lpDimHLayouts = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 

    // Create array of new TextView objects 
    TextView[] dimTextViews = new TextView[calc.getCalcDimensionCount(calcId)]; 
    LayoutParams lpDimTextViews = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f); 

    for(int dimNumber=0; dimNumber<calcDimensionCount; dimNumber++) { 

     // Setup the horizontal linear layout for the dimension 
     dimHLayouts[dimNumber].setId(100 + dimNumber); 
     dimHLayouts[dimNumber].setOrientation(android.widget.LinearLayout.HORIZONTAL); 
     dimHLayouts[dimNumber].setLayoutParams(lpDimHLayouts); 

     // Setup the dimension label TextView 
     dimTextViews[dimNumber].setId(150 + dimNumber); 
     dimTextViews[dimNumber].setLayoutParams(lpDimTextViews); 
     dimTextViews[dimNumber].setGravity(Gravity.RIGHT); 
     dimTextViews[dimNumber].setText(calc.getDimLabel(calcId, dimNumber)); 

     // Add TextView to LinearLayout 
     dimHLayouts[dimNumber].addView(dimTextViews[dimNumber]); 

     // To Do: Setup an EditText and add it to the dimension LinearLayout 

     // Add dimension LinearLayout to the UI 
     inputUILayout.addView(dimHLayouts[dimNumber]); 
    } 

    super.onActivityCreated(savedInstanceState); 
} 
+0

什麼是崩潰報告? –

+0

LogCat說; 「線程退出與未捕獲的異常」 –

+0

是的,這就是它總是說。 (她是這麼說的)。更高一點,代碼中的哪種類型的異常。例如。 http://www.javahotchocolate.com/tutorials/tut-images/android-logcat.png --- ClassCastException –

回答

0

我有問題的解決方案(感謝Boris Mocialov的幫助)。

新的UI組件數組被實例化,但數組的各個元素未被初始化。

我已經改變了循環,如下圖所示,初始化每個元素如dimHLayouts[dimNumber] = new LinearLayout(getActivity());現在工作得很好。

for(int dimNumber=0; dimNumber<calcDimensionCount; dimNumber++) { 

     // Setup the horizontal linear layout for the dimension 
     dimHLayouts[dimNumber] = new LinearLayout(getActivity()); 
     dimHLayouts[dimNumber].setOrientation(android.widget.LinearLayout.HORIZONTAL); 
     dimHLayouts[dimNumber].setLayoutParams(lpDimHLayouts); 

     // Setup the dimension label TextView 
     dimTextViews[dimNumber] = new TextView(getActivity()); 
     textViewIds[dimNumber] = generateViewId(); 
     dimTextViews[dimNumber].setId(textViewIds[dimNumber]); 
     dimTextViews[dimNumber].setLayoutParams(lpDimTextViews); 
     dimTextViews[dimNumber].setGravity(Gravity.RIGHT); 
     dimTextViews[dimNumber].setTextAppearance(getActivity(), android.R.attr.textAppearanceMedium); 
     dimTextViews[dimNumber].setText(calc.getDimLabel(calcId, dimNumber)); 

     // Setup the dimension label EditText 
     dimEditTexts[dimNumber] = new EditText(getActivity()); 
     editTextIds[dimNumber] = generateViewId(); 
     dimEditTexts[dimNumber].setId(editTextIds[dimNumber]); 
     dimEditTexts[dimNumber].setLayoutParams(lpDimEditTexts); 
     dimEditTexts[dimNumber].setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_CLASS_NUMBER); 
     dimEditTexts[dimNumber].setTextAppearance(getActivity(), android.R.attr.textAppearanceMediumInverse); 


     // Add TextView and EditText to LinearLayout 
     dimHLayouts[dimNumber].addView(dimTextViews[dimNumber]); 
     dimHLayouts[dimNumber].addView(dimEditTexts[dimNumber]); 


     // Add dimension LinearLayout to the UI 
     inputUILayout.addView(dimHLayouts[dimNumber]); 
    } 

有沒有人知道,有沒有更高效和更優雅的方法來動態添加一些未知的運行時元素?

相關問題