【问题标题】:Changing View properties crashes activity更改视图属性会使活动崩溃
【发布时间】:2014-11-02 23:31:39
【问题描述】:

尝试组合 textview 元素来显示/隐藏文本中的剧透。 问题是如果我添加代码以最初隐藏带有文本的视图,应用程序在启动后会崩溃。尝试了 setHeight 和 LayoutProperties,都导致应用程序崩溃或以某种方式覆盖 OnClickListener 事件并阻止尝试调整 TextView 的高度。

这是代码。

 String sample;
 boolean SpoilerOpen;
 int TextHeight;
 TextView Sample;
 String spoilertext;
 TextView SpoilerContainer;

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

  LinearLayout scroll = new LinearLayout (this);
  scroll.setOrientation(1);
  spoilertext="hidden txt";

  final String Spoiler_close="show";
  final String Spoiler_open="hide";
  SpoilerContainer=new TextView (this);
  SpoilerContainer.setText(Spoiler_close);
  SpoilerContainer.setClickable(true);
  SpoilerOpen=false;
  Sample=new TextView(this);
  Sample.setText(spoilertext);
// --part causing problems--
      ViewGroup.LayoutParams params = Sample.getLayoutParams();
      params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
      Sample.setLayoutParams(params);
// --end of part--
  SpoilerContainer.setOnClickListener(new View.OnClickListener() {
  public void onClick (View V)
  {
   if (SpoilerOpen==false)
  {
    SpoilerOpen=true;
    SpoilerContainer.setText(Spoiler_open);
    ViewGroup.LayoutParams params = Sample.getLayoutParams();
    params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
    Sample.setLayoutParams(params);

  }
   else
  {
    SpoilerOpen=false;
    SpoilerContainer.setText(Spoiler_close);
    ViewGroup.LayoutParams params = Sample.getLayoutParams();
    params.height = 0;
    Sample.setLayoutParams(params); 

  }

  }
  });
  scroll.addView(SpoilerContainer);
  scroll.addView(Sample);
  setContentView(scroll);

 }

发现一个类似的问题已解决 here 但在我的情况下 TextView 的父级是 LinearLayout 并且使用它的 LayoutParams 没有帮助,或者我使用不正确。 希望我已经提供了足够的信息来找到解决方案。

这是来自 Eclipse 的日志。

09-09 15:44:27.288: D/AndroidRuntime(568): Shutting down VM
09-09 15:44:27.307: W/dalvikvm(568): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
09-09 15:44:27.347: E/AndroidRuntime(568): FATAL EXCEPTION: main
09-09 15:44:27.347: E/AndroidRuntime(568): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.project/com.project.MainActivity}: java.lang.NullPointerException
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.os.Handler.dispatchMessage(Handler.java:99)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.os.Looper.loop(Looper.java:137)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.ActivityThread.main(ActivityThread.java:4340)
09-09 15:44:27.347: E/AndroidRuntime(568):  at java.lang.reflect.Method.invokeNative(Native Method)
09-09 15:44:27.347: E/AndroidRuntime(568):  at java.lang.reflect.Method.invoke(Method.java:511)
09-09 15:44:27.347: E/AndroidRuntime(568):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-09 15:44:27.347: E/AndroidRuntime(568):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-09 15:44:27.347: E/AndroidRuntime(568):  at dalvik.system.NativeStart.main(Native Method)
09-09 15:44:27.347: E/AndroidRuntime(568): Caused by: java.lang.NullPointerException
09-09 15:44:27.347: E/AndroidRuntime(568):  at com.project.MainActivity.onCreate(MainActivity.java:42)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.Activity.performCreate(Activity.java:4465)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
09-09 15:44:27.347: E/AndroidRuntime(568):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
09-09 15:44:27.347: E/AndroidRuntime(568):  ... 11 more
09-09 15:46:02.108: I/Process(568): Sending signal. PID: 568 SIG: 9

【问题讨论】:

  • 你也可以分享你的logcat吗
  • 已添加日志,希望对您有所帮助。
  • 请检查我新编辑的答案

标签: android textview layoutparams


【解决方案1】:

NullPointerException 错误是由以下行引起的:

ViewGroup.LayoutParams params = Sample.getLayoutParams();

由于 Sample 没有任何 LayoutParams,这会导致 NullPointerException。 将此行更改为以下内容:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.La‌​youtParams.MATCH_PARENT);

【讨论】:

  • 这并不能解决问题,apk 仍然崩溃。我假设最初scroll 与新创建的布局相关联。在您的变体中,它链接到现有的变体。但是对于应用程序来说,这没有任何改变,因为它仍然崩溃并出现几乎相同的错误(这次它说 com.project.MainActivity.onCreate(MainActivity.java:42) 之前是 java:69)。
  • 感谢您的建议,按照它,又遇到了两次崩溃,但找到了工作代码。想法是 ViewGroup.LayoutParams 也应该更改为 LinearLayout.LayoutParams 并且带有新参数公告的字符串应该如下所示:LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多