2013-09-22 2 views
4

Я пытаюсь создать приложение для Android, которое просто состоит из веб-представления. Я взял пример с android dev site и изменил его. Но так же просто, как кажется, каждый вызов findViewById приводит к нулевому указателю. Файл .java:findViewById возвращает null для WebView

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     WebView webView = (WebView) findViewById(R.id.webview); 
     // returns null pointer 
     webView.loadUrl("file:///android_asset/index.html"); 

     setContentView(webView); 
    } 
} 

Расположение файла:

<LinearLayout 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" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:orientation="horizontal" 
    tools:context=".MainActivity" > 

    <WebView 
     android:id="@+id/webview" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</LinearLayout> 

и я поставил следующие строки в манифесте:

<uses-permission android:name="android.permission.INTERNET" /> 

Я озадачен ...

ответ

9

Изменить на

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mylayout); // muylayout is your layout.xml 
    WebView webView = (WebView) findViewById(R.id.webview); 
    // returns null pointer 
    webView.loadUrl("file:///android_asset/index.html"); 
} 
} 

Перед вызовом вам необходимо установить содержимое своего макета. findViewById ищет вид с идентификатором, указанным в текущем макете, завышенным.

+0

Спасибо! Оно работает. – Michael

1

На всякий случай принятый ответ не работает. Поскольку у меня есть два разных макета для телефона и планшета, но только у одного есть WebView, которые вызывают findViewById(), получают нуль.

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