2013-08-03 73 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]); 
    } 

有没有人知道,有没有更高效和更优雅的方法来动态添加一些未知的运行时元素?

相关问题