2013-06-23 21 views
16

は、だから私は私のアプリとのEditTextのボタンを持って動作するためにボタンを2回クリックする必要があります。ボタンをクリックしてedittextに何かを書くと、テキストビューが変わります。それは1つのことを除いてはすべてそれが動作します。ボタンを2回クリックするだけで、作業を開始することができます(初めてアクティビティを開くときのみ)。アクティビティを開いた後の最初の時点で、ボタンを押しても何も起こりません。その後、それは正常に動作します。私はそれが

私はすでにこの上の私の研究を行なったし、私の知る限り、トラブルの原因になっている事が焦点である知っているように、私はいくつかのことを試してみましたが、何も働きました。

ボタンのXMLコード:

<Button 
    android:id="@+id/submitButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBaseline="@+id/editText1" 
    android:layout_alignBottom="@+id/editText1" 
    android:layout_alignLeft="@+id/checkBox25" 
    android:text="@string/addMaterial" 
    android:onClick="submitQuantityButton" > 
</Button> 

のEditText XMLコード:

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_below="@+id/spinner1" 
    android:ems="3" 
    android:inputType="number" 
    android:maxLength="3" > 
</EditText> 

私はアンドロイドを追加してみました:ボタンのXMLへのfocusableInTouchMode = "false" の場合、私はまた、ボタンのXMLへのrequestFocusを追加しようとしたし、それまだ動作しません。 edittextからrequestFocusを削除しても動作しません。他に何を試していいのか分からない。

のonClick方法:

public void submitQuantityButton (View v){ 
    Button submitButton = (Button)findViewById(R.id.submitButton); 
    final Spinner sItems = (Spinner)findViewById(R.id.spinner1); 
    final Context context = this; 
    final CheckBox cb4 = (CheckBox) findViewById(R.id.checkBox4); 
    final CheckBox cb5 = (CheckBox) findViewById(R.id.checkBox5); 
    final CheckBox cb33 = (CheckBox) findViewById(R.id.checkBox33); 
    final CheckBox cb30 = (CheckBox) findViewById(R.id.checkBox30); 
    final CheckBox cb6 = (CheckBox) findViewById(R.id.checkBox6); 
    final CheckBox cb7 = (CheckBox) findViewById(R.id.checkBox7); 
    final CheckBox cb9 = (CheckBox) findViewById(R.id.checkBox9); 
    final CheckBox cb10 = (CheckBox) findViewById(R.id.checkBox10); 
    final CheckBox cb11 = (CheckBox) findViewById(R.id.checkBox11); 
    final CheckBox cb12 = (CheckBox) findViewById(R.id.checkBox12); 

    // 
    final AlertDialog.Builder emptyETextErrorBuilder = new AlertDialog.Builder(context); 
    emptyETextErrorBuilder.setTitle("Warning"); 
    emptyETextErrorBuilder.setMessage("Please enter a value before pressing this button"); 
    emptyETextErrorBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
     } 
    }); 

    submitButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      final int position = sItems.getSelectedItemPosition(); 
      EditText quantityEditText = (EditText)findViewById(R.id.editText1); 

      switch (position){ 
      case 0: 
       AlertDialog.Builder spinnerErrorBuilder = new AlertDialog.Builder(context); 
       spinnerErrorBuilder.setTitle("Warning"); 
       spinnerErrorBuilder.setMessage("Please choose an item from the list above and then enter a certain value"); 
       spinnerErrorBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

        @Override 
        public void onClick(DialogInterface dialog, int id) { 
         dialog.cancel(); 
        } 
       }); 
       AlertDialog spinnerError = spinnerErrorBuilder.create(); 
       spinnerError.show(); 
       break; 
      case 1: 
       String item1 = quantityEditText.getText().toString(); 
       if (item1.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb4.setText("Elaborate Totem (" + item1 + "/250)"); 
       } 
       break; 
      case 2: 
       String item2 = quantityEditText.getText().toString(); 
       if (item2.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb5.setText("Pile of Crystalline Dust (" + item2 + "/250)"); 
       } 
       break; 
      case 3: 
       String item3 = quantityEditText.getText().toString(); 
       if (item3.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb33.setText("Pile of Crystalline Dust (" + item3 + "/250)"); 
       } 
       break; 
      case 4: 
       String item4 = quantityEditText.getText().toString(); 
       if (item4.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb30.setText("Pile of Crystalline Dust (" + item4 + "/250)"); 
       } 
       break; 
      case 5: 
       String item5 = quantityEditText.getText().toString(); 
       if (item5.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb6.setText("Powerful Venom Sac (" + item5 + "/250)"); 
       } 
       break; 
      case 6: 
       String item6 = quantityEditText.getText().toString(); 
       if (item6.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb7.setText("Vial of Powerful Blood (" + item6 + "/250)"); 
       } 
       break; 
      case 7: 
       String item7 = quantityEditText.getText().toString(); 
       if (item7.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb9.setText("Ancient Bone (" + item7 + "/250)"); 
       } 
       break; 
      case 8: 
       String item8 = quantityEditText.getText().toString(); 
       if (item8.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb10.setText("Armored Scale (" + item8 + "/250)"); 
       } 
       break; 
      case 9: 
       String item9 = quantityEditText.getText().toString(); 
       if (item9.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb11.setText("Vicious Claw (" + item9 + "/250)"); 
       } 
       break; 
      case 10: 
       String item10 = quantityEditText.getText().toString(); 
       if (item10.matches("")) 
       { 
        AlertDialog emptyETextError = emptyETextErrorBuilder.create(); 
        emptyETextError.show(); 
       } 
       else 
       { 
        cb12.setText("Vicious Fang (" + item10 + "/250)"); 
       } 
       break; 
      } 
     } 
    }); 
} 
+0

いくつかのことを言うとき、フォーカスをクリアしようとしましたか? – Evilunclebill

+0

はい、私はそれを試みたが、質問で言及するのを忘れていた – Guy

+0

待って、どこで私はclearfocusを試すべきですか?私はそれをXMLファイルのedittextに追加しようとしました。 – Guy

答えて

2

わかりましたので、私は最終的に自分で、問題の原因を考え出しました。私はそのような明白な問題を逃したとは信じられません。問題を引き起こしたのは焦点ではなく、方法そのものでした。 onClick =「onClickの」その後、私はまた、JavaコードへのonClickメソッド内buttonlistenerを追加しました:私のXMLファイルでは、私はアンドロイドでのonClickメソッドを呼び出しました。

私がしたすべてはbuttonlistenerを削除したし、これ以上のダブルクリックneccessaryはありません!だから将来誰かがこの問題を抱えている場合は、同時にonClickメソッドとbuttonListenerを持たないようにしてください。

間違っコード:

public void submitQuantityButton (View v){ 

submitButton.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
. 
. 
. //REST OF THE CODE 

それを動作させるために、私は単純にのみ残し、onclickのリスナーを削除:

public void submitQuantityButton (View v){ 
. 
. 
. //REST OF THE CODE 
+0

これは何らかの理由で私のために働いていません。私は2つのonClicksを持っていません。自分のコードに1つだけ追加します。作業の前にボタンの状態を最初にフォーカスするように変更するので、onClickメソッドの内容を抽出し、onClickイベントとonFocusイベントの両方で呼び出すだけです。複数のボタンを持つonClickのように、onFocusChangeListenerを使用してすべてのonFocusイベントをキャッチし、ボタンが選択されているかどうかを確認します。 –

0

あなたの主なレイアウトにし、あなたのEditTextからごactivity 、その後明確な焦点に設定されたフォーカスを、この一回
が更新

overrideonResume方法を試してみてください

​​

または

button.requestFocus(); 

問題が仮想キーボードである場合、それはあなたのActivityタグ内にごAndroidManifest.xmlファイルにあなたの

を助けるかもしれないだけで取得するのgetText()を使用して、このラインに

android:windowSoftInputMode="stateHidden" 
+0

答えがありがとうございますが、それでも動作しません – Guy

+0

' android:descendantFocusability = "beforeDescendants" アンドロイド:あなたのレイアウトでfocusableInTouchMode = "true" 'を追加しました –

+0

私はそれを私の相対的なレイアウトに追加しましたが、残念ながらまだ駄目です。 – Guy

0

を置きますEditTextのテキスト そしてsetText()を使ってTextViewのテキストを設定します。

23

私の問題は、Button XML定義した:

android:focusableInTouchMode="true" 

この属性を削除すると、ボタンに2度触れる必要はありません。最初のタッチがボタンにフォーカスを割り当てるために消費され、次に2番目のタッチがOnClickListenerをトリガーするように見えます。

ボタンはandroid:focusable="true"属性で問題なく動作することに注意してください。

+0

'focusableInTouchMode'を変更することが私の解決策でした。ありがとう! – Merlevede

0

私はOPと同じ問題がありました。私はすべてのフォーカス関連の提案を試みましたが、それらのどれも毎回私のために働いていませんでした。

私のレイアウトからNavigationDrawerを削除しようとしましたが、動作しませんでした。

最後に、CoordinatorLayoutLinearLayoutに置き換えようとしましたが、今度は自分のボタンが毎回クリックされるようになりました。試してみる価値があるかもしれません。

1

あなたが別のものにビューを膨らませている場合は、親ビューに設定しよう:

view.setFocusable(false); 

は私のために働きました。

0

はいつか私はそれが問題を抱えていたときまたはTXT BTN またはをクリックフラグメント上EDT、そして本当にこの例のように代わりに.setOnClickListener()必要.setOnTouchListenerを使用することができます:

txtClose.setOnTouchListener((v, event) -> { 
       // do staff... 
       return false; 
      }); 
関連する問題