Мое приложение для Android выходит из строя, когда я использую LinearLayout.addView ()

#android #android-layout

#Android #android-layout

Вопрос:

Что бы я ни делал, когда я использую LinearLayout.addView (t); мое приложение выходит из строя с предупреждением «Разделение остановлено». Я не знаю, что не так, я искал много страниц в Google, но ни одна из них не решила мою проблему.

Это мой fragment_main.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@ id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="br.rodrigo.davy.vazdividiraconta.MainActivity$PlaceholderFragment" >

<TextView
    android:id="@ id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/chooseEstablishment"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<ScrollView
    android:id="@ id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:id="@ id/LinearLayout2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@ id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Teste"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>
</ScrollView>
  

это мой код:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }


    //listEstablishment.add(new Establishment("Bar da Maria"));
    //listEstablishment.add(new Establishment("César Burguer"));
    //listEstablishment.add(new Establishment("Kilogrego"));


    LinearLayout linearLayout = (LinearLayout)findViewById(R.id.LinearLayout2);

    //for(Establishment e : listEstablishment)
    //{
        LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
                   LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        TextView t = new TextView(this);
        t.setLayoutParams(lparams);
        t.setText("Teste 2");
        linearLayout.addView(t);
    //}
}
  

И мой LogCat:

 07-02 22:08:37.626: D/AndroidRuntime(3970): Shutting down VM
07-02 22:08:37.626: W/dalvikvm(3970): threadid=1: thread exiting with uncaught exception (group=0x41601ba8)
07-02 22:08:37.626: E/AndroidRuntime(3970): FATAL EXCEPTION: main
07-02 22:08:37.626: E/AndroidRuntime(3970): Process: br.rodrigo.davy.vazdividiraconta, PID: 3970
07-02 22:08:37.626: E/AndroidRuntime(3970): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.rodrigo.davy.vazdividiraconta/br.rodrigo.davy.vazdividiraconta.MainActivity}: java.lang.NullPointerException
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.os.Handler.dispatchMessage(Handler.java:102)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.os.Looper.loop(Looper.java:136)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.ActivityThread.main(ActivityThread.java:5001)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at java.lang.reflect.Method.invokeNative(Native Method)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at java.lang.reflect.Method.invoke(Method.java:515)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at dalvik.system.NativeStart.main(Native Method)
07-02 22:08:37.626: E/AndroidRuntime(3970): Caused by: java.lang.NullPointerException
07-02 22:08:37.626: E/AndroidRuntime(3970):     at br.rodrigo.davy.vazdividiraconta.MainActivity.onCreate(MainActivity.java:50)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.Activity.performCreate(Activity.java:5231)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
07-02 22:08:37.626: E/AndroidRuntime(3970):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
07-02 22:08:37.626: E/AndroidRuntime(3970):     ... 11 more
07-02 22:08:41.120: I/Process(3970): Sending signal. PID: 3970 SIG: 9
  

Ответ №1:

LinearLayout2 находится внутри макета фрагмента, а не макета действия. Итак, по сути, вы вызываете findViewById() не в том месте.

У вас есть два возможных решения:

  1. Попробуйте вместо этого запустить этот код в placeholderfragment’s onCreateView() , или
  2. Полностью избавьтесь от фрагмента и переместите свои представления в activity_main.xml.