2012-07-20 71 views
6

這時候是個例外:ClassCastException異常使用LinearLayout.LayoutParams

07-20 19:52:14.193: E/AndroidRuntime(3908): FATAL EXCEPTION: main 
07-20 19:52:14.193: E/AndroidRuntime(3908): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:634) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.View.measure(View.java:12892) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.View.measure(View.java:12892) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1249) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.View.measure(View.java:12892) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.View.measure(View.java:12892) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:812) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:553) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.View.measure(View.java:12892) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4698) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:293) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2265) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.View.measure(View.java:12892) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2628) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.os.Looper.loop(Looper.java:137) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at android.app.ActivityThread.main(ActivityThread.java:4507) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at java.lang.reflect.Method.invoke(Method.java:511) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
07-20 19:52:14.193: E/AndroidRuntime(3908):  at dalvik.system.NativeStart.main(Native Method) 

我看不到的地方拋出異常,所以我不能弄明白相當不錯的線路。我知道它是在這幾行:

public class TodayFragment extends Fragment { 

ListView listView; 
String[] urls; 
ActionBar mActionBar; 
Spinner spinner1; 

public TodayFragment() { 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    LinearLayout linear = new LinearLayout(getActivity()); 
    linear.setOrientation(LinearLayout.VERTICAL); 

    spinner1 = new Spinner(getActivity()); 
    spinner1.setLayoutParams(new LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT)); 
    linear.addView(spinner1); 
    listView = new ListView(getActivity()); 
    spinner1.setLayoutParams(new LayoutParams(
      LinearLayout.LayoutParams.MATCH_PARENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT)); 
    linear.addView(listView); 

    new ParseHTML().execute(); 
    return linear; 
    } 
} 

我使用的片段是android.support.v4.app.Fragment。這是什麼原因?

回答

16

您的LayoutParams導入語句可能導入ViewGroup.LayoutParams。儘量明確使用LinearLayout.LayoutParams(...):

spinner1.setLayoutParams(new LinearLayout.LayoutParams(
      LinearLayout.LayoutParams.WRAP_CONTENT, 
      LinearLayout.LayoutParams.WRAP_CONTENT)); 
2

嘗試attatching任何孩子之前設置的LinearLayout的的LayoutParams'。

LinearLayout linear = new LinearLayout(getActivity()); 
linear.setLayoutParams(new ViewGroup.LayoutParams(
     ViewGroup.LayoutParams.WRAP_CONTENT, 
     ViewGroup.LayoutParams.WRAP_CONTENT)); 
linear.setOrientation(LinearLayout.VERTICAL); 
1

如果你想知道它的LayoutParams您必須對每個視圖,看看這個doc

每個視圖必須有一個LayoutParam acording給他的父母。

例如,爲了創建這個視圖hierarhy,

  • RelativeLayout的RelativeLayout的
    • 的LinearLayout的LinearLayout,方向:垂直
    • 的TextView的TextView
    • 按鈕按鈕1
    • 按鈕BUTTON2

替換爲您的onCreate方法的內容,您的主要活動:

super.onCreate(savedInstanceState); 
    RelativeLayout relativeLayout = new RelativeLayout(this); 

    LinearLayout linearLayout = new LinearLayout(this); 
    linearLayout.setOrientation(LinearLayout.VERTICAL); 
    linearLayout.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)); 
    relativeLayout.addView(linearLayout); 

    TextView textView = new TextView(this); 
    textView.setText("a text"); 
    textView.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
    linearLayout.addView(textView); 

    Button button1 = new Button(this); 
    button1.setText("button 1"); 
    button1.setLayoutParams(new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 
    linearLayout.addView(button1); 

    setContentView(relativeLayout);