2012-02-10 96 views
0

all!我在Android的世界很新,但我在此之前就儘可能多地搜索了這個問題的答案...以編程方式將微調器添加到LinearLayout中

我在我的佈局中有一個水平的LinearLayout,名爲「spinner」。最初(即在xml文件中),那裏只有一個微調器。我也有一個按鈕(id:addPath),它激活了一個方法,我想這個方法(add_path)添加另一個微調器到視圖(和另一個命中 - anothr微調等)。 所有額外的spinners是相同的,即,基於相同的字符串數組(path_array)。

這是我的XML看起來像:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/compWelcome" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"   
     android:text="@string/complicated_welcome" /> 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/spinners" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/textCompStart" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/complicated_prefix" /> 

     <Spinner 
      android:id="@+id/spinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:prompt="@string/spinner_prompt" /> 

     <TextView 
      android:id="@+id/textCompEnd" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/complicated_postfix" /> 
    </LinearLayout> 

     <Button 
      android:id="@+id/addPath" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:onClick="add_path" 
      android:text="@string/add_path_button" /> 

</LinearLayout> 
</ScrollView> 

這是我如何激活內部的onCreate微調:

Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
      this, R.array.path_array, android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

現在,應該如何add_path方法的樣子,既創造微調器和實際添加到LinearLayout

感謝, 嫩


下面是擊中調用中,我已經添加了微調創作方法按鍵後輸出的logcat:

02-10 19:56:17.097: D/AndroidRuntime(284): Shutting down VM 
02-10 19:56:17.097: W/dalvikvm(284): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
02-10 19:56:17.097: E/AndroidRuntime(284): Uncaught handler: thread main exiting due to uncaught exception 
02-10 19:56:17.117: E/AndroidRuntime(284): java.lang.IllegalStateException: Could not execute method of the activity 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.View$1.onClick(View.java:2031) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.View.performClick(View.java:2364) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.View.onTouchEvent(View.java:4179) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.widget.TextView.onTouchEvent(TextView.java:6541) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.View.dispatchTouchEvent(View.java:3709) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884) 
02-10 19:56:17.117: E/AndroidRuntime(284): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659) 
02-10 19:56:17.117: E/AndroidRuntime(284): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.app.Activity.dispatchTouchEvent(Activity.java:2061) 
02-10 19:56:17.117: E/AndroidRuntime(284): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.os.Looper.loop(Looper.java:123) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.app.ActivityThread.main(ActivityThread.java:4363) 
02-10 19:56:17.117: E/AndroidRuntime(284): at java.lang.reflect.Method.invokeNative(Native Method) 
02-10 19:56:17.117: E/AndroidRuntime(284): at java.lang.reflect.Method.invoke(Method.java:521) 
02-10 19:56:17.117: E/AndroidRuntime(284): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
02-10 19:56:17.117: E/AndroidRuntime(284): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
02-10 19:56:17.117: E/AndroidRuntime(284): at dalvik.system.NativeStart.main(Native Method) 
02-10 19:56:17.117: E/AndroidRuntime(284): Caused by: java.lang.reflect.InvocationTargetException 
02-10 19:56:17.117: E/AndroidRuntime(284): at arnon.cousinator.complicated.add_path(complicated.java:48) 
02-10 19:56:17.117: E/AndroidRuntime(284): at java.lang.reflect.Method.invokeNative(Native Method) 
02-10 19:56:17.117: E/AndroidRuntime(284): at java.lang.reflect.Method.invoke(Method.java:521) 
02-10 19:56:17.117: E/AndroidRuntime(284): at android.view.View$1.onClick(View.java:2026) 
02-10 19:56:17.117: E/AndroidRuntime(284): ... 23 more 
02-10 19:56:17.117: E/AndroidRuntime(284): Caused by: java.lang.NullPointerException 
02-10 19:56:17.117: E/AndroidRuntime(284): ... 27 more 
02-10 19:56:17.148: I/dalvikvm(284): threadid=7: reacting to signal 3 
02-10 19:56:17.148: I/dalvikvm(284): Wrote stack trace to '/data/anr/traces.txt' 
02-10 20:01:17.165: I/Process(284): Sending signal. PID: 284 SIG: 9 
02-10 20:01:17.638: D/dalvikvm(290): GC freed 680 objects/54464 bytes in 54ms 
02-10 20:01:17.808: D/dalvikvm(290): GC freed 40 objects/1472 bytes in 46ms 

(我使用Eclipse btw)。

謝謝, Arnon

回答

1

你需要得到的佈局

View linearLayout = findViewById(R.id.layoutID); 

木箱微調

 Spinner spinner = new Spinner(this); 
//Make sure you have valid layout parameters. 
    spinner .setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); 

        ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this, 
          android.R.layout.simple_spinner_dropdown_item, spinnerList); 
        spinner.setAdapter(spinnerArrayAdapter); 

然後加微調查看

((LinearLayout) linearLayout).addView(spinner); 
+0

感謝您的快速和詳細的答覆。一切都很好,但最後一個addView ...我得到了(很常見)「意外停止」的信息......我做錯了什麼?我應該將視圖添加到線性佈局的特定ID(如果是這樣 - 如何?)。 – 2012-02-11 00:56:41

+0

什麼是logcat錯誤? – kosa 2012-02-11 00:59:47

+0

我將它添加爲答案,因爲它相當長... – 2012-02-11 02:14:23

相關問題