0

キーボードを強制的に表示するアクティビティがありますが、

InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

キーボードは適切に表示され、必要に応じて隠されます。問題は、アクティビティを終了すると、アプリがクラッシュすることです。アクティビティがキーボードを表示しない場合、またはテキストの編集を開始せずに表示する場合、エラーは発生せずに終了しますが、1 つ以上の文字を書き込むだけでアプリがクラッシュします。それを解決する方法は?ありがとうございました。

活動を終了するために使用される方法、

    boto_back.setOnClickListener(new OnClickListener() 
            {
                @Override
                public void onClick(View arg0) 
                {
                    InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);


                    finish();
                }
            });
 @Override
      public void onDestroy() 
      {
        if (adMob != null) 
        {
          // Destroy the AdView.
          adMob.destroy();
        }

        super.onDestroy();
      }

ログキャット、

07-07 19:04:25.191: E/AndroidRuntime(8443): FATAL EXCEPTION: main
07-07 19:04:25.191: E/AndroidRuntime(8443): java.lang.RuntimeException: Unable to destroy activity {com.xxxx.xxxx/com.xxxx.projecte1.TabBar_iOSActivity}: java.lang.RuntimeException: Unable to destroy activity {com.xxxx.xxxx/com.xxxx.projecte1.webPush}: java.lang.NullPointerException
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2693)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2711)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.access$2100(ActivityThread.java:121)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:976)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.os.Looper.loop(Looper.java:130)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.main(ActivityThread.java:3701)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at java.lang.reflect.Method.invokeNative(Native Method)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at java.lang.reflect.Method.invoke(Method.java:507)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at dalvik.system.NativeStart.main(Native Method)
07-07 19:04:25.191: E/AndroidRuntime(8443): Caused by: java.lang.RuntimeException: Unable to destroy activity {com.xxxx.xxxx/com.xxxx.projecte1.webPush}: java.lang.NullPointerException
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2693)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2603)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.LocalActivityManager.dispatchDestroy(LocalActivityManager.java:622)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityGroup.onDestroy(ActivityGroup.java:85)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at com.xxxx.projecte1.TabBar_iOSActivity.onDestroy(TabBar_iOSActivity.java:417)
07-07 19:04:25.191: E/AndroidRuntime(8443):     at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:2680)
07-07 19:04:25.191: E/AndroidRuntime(8443):     ... 11 more
4

4 に答える 4

2

これはあなたの唯一の活動ですか?

はいの場合......finish(); を削除してみてください。

于 2012-07-07T16:49:40.717 に答える
1

フラグが逆になっていると思います:

Android documentationから、toggleSoftInput関数には次のパラメーターがあります。

public void toggleSoftInput (int showFlags, int hideFlags) 

使用中に、showFlags の代わりに hideFlags を使用しています。

inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

以下のように入れ替えてみてください。

inputMethodManager.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
于 2012-07-10T09:33:40.557 に答える
1

最後の手段として、次のように try catch ブロックを使用して、いつでも例外をキャッチできます。

  @Override
  public void onDestroy() 
  {
    try {
       if (adMob != null) 
       {
         // Destroy the AdView.
         adMob.destroy();
       }
    } catch (NullPointerException e) {
        e.printStackTrace(); //Or don't print it if you dont want.
    }

    super.onDestroy();
  }

ただし、これは最善のアプローチではありません (おそらく最も好ましくない方法です) が、仕事は完了します。あなたは活動を終了しているので、これが何かを台無しにすることはないと思います。

于 2012-07-10T19:59:22.037 に答える
1

この方法を試してみませんか:

キーボードを表示する場合:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(inputEditText, InputMethodManager.SHOW_FORCED);

非表示の場合:

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(inputEditText.getWindowToken(), 0);
于 2012-07-10T08:00:11.560 に答える