尝试组合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
答案 0 :(得分:1)
由于以下行导致NullPointerException错误:
ViewGroup.LayoutParams params = Sample.getLayoutParams();
由于Sample没有任何LayoutParams,因此导致NullPointerException
。
将此行更改为以下内容:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.MATCH_PARENT);