1

Bluetoothスキャナーを使用して入力をスキャンするアプリケーションがあります。現在のインテントが入力を受け取ると、setResult を設定してアクティビティを終了し、別のインテントを開始します。ただし、アクティビティが入力を受け取って終了し、その後新しいアクティビティが開始されると、新しい入力をスキャンする代わりに、古い入力を取得して先に進みます。どうすればこれを止めることができますか。これは私が onCreate() 内で行っていることです:

  barcodeEntry = (EditText) findViewById(R.id.barcode_input);
  barcodeEntry.requestFocus();
  barcodeEntry.addTextChangedListener(new TextWatcher() {

  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {

  }

  @Override
  public void beforeTextChanged(CharSequence s, int start, int count, int after) {

  }

  @Override
  public void afterTextChanged(Editable s) {
    Toast toast = Toast.makeText(getApplicationContext(),
        "Received Scan", Toast.LENGTH_SHORT);
    toast.show();
    Intent returnIntent = new Intent();
    returnIntent.putExtra(WorkflowUtil.EXTRA_ACTION, barcodeEntry.getText().toString());
    setResult(RESULT_OK, returnIntent);
    finish();
  }
});

これは、レイアウト内の私の EditText 宣言がどのように見えるかです:

<EditText
        android:id="@+id/barcode_input"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginTop="10dp"
        android:background="#000000"
        android:enabled="true"
        android:inputType="text"
        android:textColor="#000000"
        android:textSize="20sp"
        android:visibility="visible" />

どうすればこれを止めることができますか。ビューがロードされたときにフォーカスを取得しないようにすると機能しますか?

4

1 に答える 1

2

ビューのソフトキーボードを非表示にする方法は次のとおりです。

/** hides the soft keyboard for a specific view */
public static void hideSoftKeyboardFromFocusedView(final Context context, final View view) 
  {
  final InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
  imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
  }

ソフトキーボードを表示するために同様のことができます。

EditText にフォーカスを強制する方法を次に示します。これにより、ビューに既にフォーカスがある場合でも、ソフトキーボードも表示されます。

public static void forceFocusOnView(final View view) 
  {
  view.post(new Runnable() 
    {
    @Override
    public void run() 
      {
      view.clearFocus();
      view.post(new Runnable() 
        {
        @Override
        public void run() 
          {
          view.requestFocus();
          }
        });
      }
    });
  }

それが機能しない場合は、次を使用できます。

public static void focusAndShowSoftKeyboardOnView(final View v) 
  {
  new Handler().post(new Runnable() 
    {
    @Override
    public void run() 
      {
      v.requestFocus();
      }
    });
  final InputMethodManager m = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
  if (m != null)
    m.toggleSoftInput(0, InputMethodManager.SHOW_IMPLICIT);
  }
于 2013-08-16T20:23:07.167 に答える