更改视图属性会导致活动崩溃

时间:2014-09-09 13:50:56

标签: android textview layoutparams

尝试组合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

1 个答案:

答案 0 :(得分: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);