2017-01-25 2 views
0

Я пытаюсь создать приложение с тремя RelativeLayouts, вложенными в один RelativeLayout. Я хочу программно изменить видимость RelativeLayouts. Он отлично работает на моем смартфоне (Android 4.4.2), но не на планшете (Android 5.1.1)Android: Findviewbyid() возвращает null

Когда на планшет вызывается findViewById(), он возвращает null.

Что я делаю неправильно?

MainActivity.java:

RelativeLayout mainactivity, multiplewifi, nowifi; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    if (savedInstanceState != null) //if switched from landscape to portrait mode or vice versa 
     ((WebView) findViewById(R.id.webvieew)).restoreState(savedInstanceState); //restore webview 
    else { 
     Initialize(); 
     wifiManager.startScan(); //start a scan for available wifi networks 
    } 
} 

public void Initialize() { 
    mainactivity = (RelativeLayout) findViewById(R.id.MainActivity); 
    multiplewifi = (RelativeLayout) findViewById(R.id.MultipleWifi); 
    nowifi = (RelativeLayout) findViewById(R.id.NoWifi); 
} 

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<RelativeLayout 
    android:id="@+id/MultipleWifi"> 

    <Button/> 

    <TextView/> 

    <Spinner/> 

</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/MainActivity"> 

    <WebView 
    android:id="@+id/webvieew"/> 

    <ImageButton/> 
</RelativeLayout> 

<RelativeLayout 
    android:id="@+id/NoWifi"> 

    <TextView/> 
</RelativeLayout> 

Вход:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.example.wdt, PID: 5243 
       java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.wdt/com.example.wdt.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397) 
        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5268) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697) 
       Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setVisibility(int)' on a null object reference 
        at com.example.wdt.MainActivity.Initialize(MainActivity.java:95) 
        at com.example.wdt.MainActivity.onCreate(MainActivity.java:75) 
        at android.app.Activity.performCreate(Activity.java:6033) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2288) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2397)  
        at android.app.ActivityThread.access$800(ActivityThread.java:151)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1310)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:135)  
        at android.app.ActivityThread.main(ActivityThread.java:5268)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at java.lang.reflect.Method.invoke(Method.java:372)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)  
+0

post stacktrace too – user2582318

+0

Его можно полностью вызвать в любой точке вашего acitivty ... Это не ваша проблема ... –

+0

Вы не указали идентификатор этой строки: ((WebView) findViewById (R.id .webvieew)) restoreState (savedInstanceState). // restore webview Нет андроида: id = "@ + id/webvieew" в вашем xml ... Я думаю, что это проблема –

ответ

1

Ваше приложение работает на телефонах, но не на таблетки, это обычное Это означает проблему ресурсов.

Ресурсы (layout, values, ...), используемые для Android, зависят от используемого устройства. Если есть определенная папка, соответствующая конфигурации устройства (например, большой экран), переопределение ресурса в этой папке будет использоваться вместо общей папки.

Существует несколько различий между телефоном/планшетом (размер экрана, соотношение, ориентация, ...).

В вашем случае вам может потребоваться обновить или удалить макет main_activity.xml в layout folder, который соответствует вашему планшету.

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