【问题标题】:Android dynamically adding Scrollview-ContentAndroid动态添加Scrollview-Content
【发布时间】:2020-02-22 18:47:50
【问题描述】:

我正在努力为滚动视图动态添加一些内容。如果有人能给我解释一下,我的应用为什么会崩溃,我会很高兴。

public class LessonView extends AppCompatActivity {
    int maxWidth = 450;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // old
        ScrollView SView = new ScrollView(this);

        // new
        // LinearLayout activityLL = (LinearLayout) findViewById(R.id.myLL);

        RelativeLayout.LayoutParams centerTableParameters = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT
        );
        centerTableParameters.addRule(RelativeLayout.CENTER_IN_PARENT);

        LinearLayout llayout = new LinearLayout(this);
        llayout.setOrientation(LinearLayout.VERTICAL);
        llayout.setGravity(Gravity.CENTER);

        Resources res  = getResources();

        Intent in = getIntent();
        int index = in.getIntExtra("com.example.ITEM_INDEX", -1);

        if(true){


            // create tables:
            boolean tablesEnd = false;
            boolean lineEnd = false;
            int j = 0;
            int i = 0;
            while(i < cn.length){
                TableLayout tableLayout = new TableLayout(this);
                TableRow tableRow1 = new TableRow(this);
                TableRow tableRow2 = new TableRow(this);
                TableRow tableRow3 = new TableRow(this);
                TableLayout.LayoutParams lp = new TableLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                tableLayout.setLayoutParams(lp);

                // create lines:
                lineEnd = false;
                while(i < cn.length && lineEnd == false){
                     [...]
                }

                tableLayout.addView(tableRow1);
                tableLayout.addView(tableRow2);
                tableLayout.addView(tableRow3);

                llayout.addView(tableLayout, centerTableParameters);
                Space space = new Space(this);
                space.setLayoutParams(new LinearLayout.LayoutParams(10, 20));
                llayout.addView(space);

            }

            // old:
            SView.addView(llayout);
            setContentView(SView);

            // new:
            //activityLL.addView(llayout);
            //setContentView(R.layout.activity_lesson_view);
        }
    }

如果我使用“旧”代码运行它(参见注释“旧”下方的行),它运行良好且没有错误。旧代码不使用任何布局文件。我想在布局中添加更多功能;)一旦我使用“新”行(旧行作为 cmets)启动活动,应用程序就会崩溃并显示错误消息:

2019-10-26 23:51:42.694 4599-4599/com.example.MyApp E/AndroidRuntime: 致命异常: main 进程:com.example.MyApp,PID:4599 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.MyApp/com.example.MyApp.LessonView}:java.lang.NullPointerException:尝试调用虚拟方法 'void android.widget.LinearLayout.addView(android. view.View)' 在空对象引用上 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.LinearLayout.addView(android.view.View)” 在 com.example.MyApp.LessonView.onCreate(LessonView.java:242) 在 android.app.Activity.performCreate(Activity.java:7136) 在 android.app.Activity.performCreate(Activity.java:7127) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 在 android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:6669) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

错误似乎发生在"activityLL.addView(llayout);" (line 242),但我没有解释为什么......

【问题讨论】:

    标签: android crash scrollview dynamically-generated


    【解决方案1】:

    在使用 LinearLayout activityLL = (LinearLayout) findViewById(R.id.myLL); 检索您的 LinearLayout 之前,您应该调用 setContentView(R.layout.activity_lesson_view);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 2011-03-25
      相关资源
      最近更新 更多