NPE по настройке видимости - PullRequest
       11

NPE по настройке видимости

1 голос
/ 03 октября 2011

Некоторые пользователи нашего приложения жалуются на исключение nullpointerexception, которое, по-видимому, происходит только с ними (HTC Desire, новейший Android, 2.3?), Но не воспроизводится на других устройствах. Я немного озадачен, что может быть источником этого.

Есть идеи?

java.lang.NullPointerException

android.webkit.WebView.navHandledKey(WebView.java:9290)
android.webkit.WebView.requestFocus(WebView.java:7847)
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1131)
android.view.ViewGroup.requestFocus(ViewGroup.java:1087)
android.view.ViewGroup.onRequestFocusInDescendants(ViewGroup.java:1131)
android.view.ViewGroup.requestFocus(ViewGroup.java:1087)
android.view.View.requestFocus(View.java:3718)
android.view.View.requestFocus(View.java:3696)
android.view.ViewRoot.focusableViewAvailable(ViewRoot.java:1785)
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470)
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470)
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470)
android.view.ViewGroup.focusableViewAvailable(ViewGroup.java:470)
android.view.View.setFlags(View.java:4680)
android.view.View.setVisibility(View.java:3163)
at com.ichi2.anki.Reviewer.fillFlashcard(Reviewer.java:2282)

код выглядит так:

private FrameLayout mCardContainer;
...
mCardContainer = (FrameLayout) findViewById(R.id.flashcard_frame);
...
mCardFrame = (FrameLayout) findViewById(R.id.flashcard);
mCardFrame.removeAllViews();
mCard = createWebView();
mCardFrame.addView(mCard);
...
mCardContainer.setVisibility(View.VISIBLE); --> 2282
...
...
private WebView createWebView() {
    WebView webView = new MyWebView(this);
    webView.setWillNotCacheDrawing(true);
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
    if (mZoomEnabled) {
        webView.getSettings().setBuiltInZoomControls(true);
    }
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebChromeClient(new AnkiDroidWebChromeClient());
    webView.addJavascriptInterface(new JavaScriptInterface(), "interface");
    if (Integer.parseInt(android.os.Build.VERSION.SDK) > 7) {
        webView.setFocusableInTouchMode(false);
    }
    mScaleInPercent = webView.getScale();
    return webView;
}
...
class MyWebView extends WebView {

    public MyWebView(Context context) {
        super(context);
    }

    @Override
    public boolean onCheckIsTextEditor() {
        return true; 
    }
}

соответствующий xml-файл выглядит так:

...
<FrameLayout android:id="@+id/flashcard_frame"
    android:layout_margin="3dip"
    android:layout_below="@+id/top_bar"
    android:layout_above="@+id/answer_nextTime_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <FrameLayout android:id="@+id/flashcard"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">            
        <FrameLayout android:id="@+id/touch_layer"
            android:layout_marginTop="20dip"
            android:longClickable="true"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"/>
    </LinearLayout>
    <FrameLayout android:id="@+id/whiteboard"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
    <ImageView android:id="@+id/lookup_button"
        android:padding="5dip"
        android:layout_gravity="right"
        android:src="@drawable/ic_lookup"
        android:visibility="gone"
        android:clickable="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <FrameLayout android:id="@+id/flashcard_border"
        android:visibility="gone"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>
</FrameLayout>

...

1 Ответ

0 голосов
/ 03 октября 2011

Есть строки:

mCardContainer = (FrameLayout) findViewById(R.id.flashcard_frame);
mCardContainer.setVisibility(View.VISIBLE); --> 2282

После звонка на setContentView(R.layout.your_proper_layout_resource);?

...