2014-09-09 5 views
0

Попытался сделать комбинацию элементов 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

вы можете поделиться своей LogCat также – Metehan

+0

Добавленных журналов, надеюсь, что это помогает. –

+0

проверить мой новый отредактированный ответ – Metehan

ответ

1

ошибка NullPointerException была вызвана тем, что в следующей строке:

ViewGroup.LayoutParams params = Sample.getLayoutParams(); 

Поскольку образец не имел никаких LayoutParams это вызывает NullPointerException. Измените эту строку в следующий:

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

Это не решит проблему, apk все еще падает. Я предполагаю, что изначально «прокрутка» связана с новым свежеприготовленным макетом. В вашем варианте он связан с существующим. Но для приложения это ничего не меняет, так как оно все равно падает с почти той же ошибкой (на этот раз он говорит 'com.project.MainActivity.onCreate (MainActivity.java:42)' раньше он был 'java: 69'). –

+1

Спасибо за совет, последовали за ним, получили еще две аварии, но выработали рабочий код. Идея заключается в том, что 'ViewGroup.LayoutParams' также следует изменить на' LinearLayout.LayoutParams', а строка с объявлением новых параметров должна выглядеть так: 'LinearLayout.LayoutParams params = new LinearLayout.LayoutParams (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout .LayoutParams.MATCH_PARENT); ' –

Смежные вопросы