6

私は互換パッケージを使用しており、onCreateView でaFragmentを返す人がいます。WebView問題は、onCreate 中にフラグメントが追加されない場合、ソフトキーボードActivity内のテキストボックスをクリックしたときにWebView表示されないことです。カスタム Web フラグメントを追加した後にデバイスを回転させてアクティビティを再作成すると、テキスト フィールドをクリックするとソフトキーボードが表示されます。

明確にするために、2つの異なるシナリオを次に示します

public void onCreate(Bundle state){
   if(state == null){
      WebFragment web = new WebFragment();
      getSupportFragmentManager.beginTransaction().add(android.R.id.content, web).commit();
   }
}



public void onClick(View v){
      WebFragment web = new WebFragment();
      getSupportFragmentManager.beginTransaction().add(android.R.id.content, web).commit();
}

アクティビティの onCreate メソッド中にフラグメントを追加する最初のケースでは、フラグメントに含まれる WebView は、テキスト フィールドが押されたときに正常に機能します。ただし、2 番目の例では、Web ビューが表示された後にデバイスを回転させない限り、Web ビューのテキスト フィールドをクリックしても何も起こりません。フラグメントが適切に機能するために新しいアクティビティを作成する必要がある場合、誰かが解決策を提供できますか?そもそもフラグメントの目的を打ち負かします。

4

2 に答える 2

11

これを Fragment の onCreateView メソッドに追加します

webview.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_UP:
                if (!v.hasFocus()) {
                    v.requestFocus();
                }
                break;
        }
        return false;
    }
});  

Android 2.3.3 および 3.2.0 でテスト済み。

issue #7189StackOverflowに基づく

于 2011-08-12T19:48:43.773 に答える
0

RuslanKによる解決策も私のために働いています

WebView を拡張するクラスを作成する

private class MyWebView extends WebView {

public MyWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
 }

// Note this!
@Override
public boolean onCheckIsTextEditor() {
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent ev)     {
    switch (ev.getAction())         {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_UP:
            if (!hasFocus())
                requestFocus();
        break;
    }

    return super.onTouchEvent(ev);
}
}

次に、ビューを xml レイアウトに追加します。

<com.example.view.MyWebView
    android:id="@+id/vw"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

などなど、コードの int...

MyWebView webView = (MyWebView) parent.findViewById(R.id.vw);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.requestFocus(View.FOCUS_DOWN);
webView.loadUrl(url);
于 2013-10-21T13:19:10.780 に答える