2017-03-05 12 views
0

EditTextに関する問題があります。プレーヤーが次のような例を得る簡単な数学ゲームをする:9 x 9 = __。空のスペース(= EditText、数字のみに限定)は、プレイヤーが方程式から正解を入力し、[正解]ボタンを押して方程式を修正する必要があります。EditText、maxLines = 1に設定してEnterを押すと消去され、クラッシュする

問題: 私は現在android.maxLines = "1"を設定しています。プレーヤーがEnterキーを押すたびに、書かれたテキストはすべて消去されます。あなたが戻って入力し、正しいボタンを押すと、アプリは動作しています。しかし、あなたが入力を押していない限り、アプリは正しいボタンを使ってうまく動作します。どのように私はそれがクラッシュ/動作を停止するのを防ぐのですか?また、Enterキーを押したときに数字を消去しないようにしてください。

XMLファイル:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_play" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.android.laboration2.EasyActivity"> 


    <TextView 
     android:id="@+id/textEasyMultiply" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignTop="@+id/textEasyNumber1" 
     android:layout_centerHorizontal="true" 
     android:layout_gravity="start" 
     android:text="@string/multiply" 
     android:textAlignment="textStart" 
     android:textColor="@android:color/black" 
     android:textSize="40sp" /> 

    <TextView 
     android:id="@+id/textEasyNumber1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginEnd="25dp" 
     android:layout_marginRight="25dp" 
     android:layout_marginTop="49dp" 
     android:layout_toLeftOf="@+id/answerButton" 
     android:layout_toStartOf="@+id/answerButton" 
     android:text="@string/number_1" 
     android:textAlignment="center" 
     android:textColor="@android:color/black" 
     android:textSize="50sp" /> 

    <TextView 
     android:id="@+id/textEasyEqual" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textEasyNumber1" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="18dp" 
     android:text="@string/equal" 
     android:textAlignment="center" 
     android:textColor="@android:color/black" 
     android:textSize="50sp" /> 

    <EditText 
     android:id="@+id/editTextEasyResult" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/textEasyEqual" 
     android:layout_centerHorizontal="true" 
     android:hint=" " 
     android:maxLines="1" 
     android:textAlignment="center" 
     android:textColor="@android:color/black" 
     android:textSize="50sp" /> 

    <TextView 
     android:id="@+id/textEasyScore" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_gravity="start" 
     android:layout_marginBottom="31dp" 
     android:layout_toLeftOf="@+id/answerButton" 
     android:layout_toStartOf="@+id/answerButton" 
     android:text="@string/score_0" 
     android:textAlignment="textStart" 
     android:textColor="@android:color/black" 
     android:textSize="24sp" /> 

    <Button 
     android:id="@+id/answerButton" 
     android:layout_width="120dp" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/editTextEasyResult" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="36dp" 
     android:background="@android:color/holo_orange_dark" 
     android:text="@string/button_result" 
     android:textAllCaps="false" 
     android:textColor="@android:color/white" 
     android:textSize="18sp" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/textEasyNumber2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/textEasyEqual" 
     android:layout_alignEnd="@+id/textEasyLevel" 
     android:layout_alignRight="@+id/textEasyLevel" 
     android:layout_marginEnd="12dp" 
     android:layout_marginRight="12dp" 
     android:inputType="number" 
     android:text="@string/number_2" 
     android:textAlignment="center" 
     android:textColor="@android:color/black" 
     android:textSize="50sp" /> 

    <TextView 
     android:id="@+id/textEasyLevel" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/textEasyScore" 
     android:layout_alignBottom="@+id/textEasyScore" 
     android:layout_toEndOf="@+id/answerButton" 
     android:layout_toRightOf="@+id/answerButton" 
     android:text="@string/level_0" 
     android:textAlignment="center" 
     android:textColor="@android:color/black" 
     android:textSize="24sp" /> 


</RelativeLayout> 

JAVAファイル:

@Override 
public void onClick(View v) { 

    switch(v.getId()){ 
     case R.id.answerButton: 
      int easyNum1 = Integer.parseInt(textEasyNumber1.getText().toString()); 
      int easyNum2 = Integer.parseInt(textEasyNumber2.getText().toString()); 
      int easyResult = Integer.parseInt(editTextEasyResult.getText().toString()); 
      if(easyNum1 * easyNum2 == easyResult){ 
       currentScore++; 
       currentLevel++; 
       textEasyScore.setText("Score: " + currentScore); 
       textEasyLevel.setText("Level: " + currentLevel); 
       Toast.makeText(getApplicationContext(), "Good job!", Toast.LENGTH_LONG).show(); 
       editTextEasyResult.setText(""); 
      }else{ 
       currentScore = 0; 
       currentLevel = 0; 
       Toast.makeText(getApplicationContext(),"Wrong! :(", Toast.LENGTH_LONG).show(); 
      } 
      //Updates Scores & Level 
      textEasyScore.setText("Score: " + currentScore); 
      textEasyLevel.setText("Level: " + currentLevel); 
      break; 
    }//switch ends here 

    //stores the Score into the High Score page, when new High Score is reached it will auto-update 
    SharedPreferences sharedPrefsHighScore = getSharedPreferences("Prefs_HighScore",MODE_PRIVATE); 
    SharedPreferences.Editor editorScore = sharedPrefsHighScore.edit(); 
    int storedHighScore = sharedPrefsHighScore.getInt("highScore",0); 
    if (currentScore>storedHighScore) { 
     editorScore.putInt("highScore", currentScore); 
     editorScore.commit(); 

     //if a new High Score is achieved, the toastmessage "NEW HIGH SCORE!" will be shown (with modifications) 
     Toast highScoreToast = Toast.makeText(getApplicationContext(), "NEW HIGH SCORE!", Toast.LENGTH_LONG); 
      TextView toastMessage = (TextView) highScoreToast.getView().findViewById(android.R.id.message); 
      toastMessage.setTextColor(Color.WHITE); 
      toastMessage.setTextSize(25); 
     highScoreToast.show(); 
    }//if-statement ends here 

    randomNumbersForEquation(); 
}//onClick ends here 


//adds a random number for our Equation (for textEasyNumber1 and textEasyNumber2) 
void randomNumbersForEquation(){ 
    int addingOneTocurrentLevel = currentLevel + 1; 
    int numberRange = addingOneTocurrentLevel * 3; 
    Random randInt = new Random(); 

    int Number1 = randInt.nextInt(numberRange); 
    Number1++;//don't want a zero value 

    int Number2 = randInt.nextInt(numberRange); 
    Number2++;//don't want a zero value 

    textEasyNumber1.setText("" + Number1); 
    textEasyNumber2.setText("" + Number2); 
}//setQuestion ends here 
+0

が – rafsanahmad007

+0

rafsanahmad007 @ ...クラッシュログを投稿してみてください。ここではクラッシュログです: –

+0

rafsanahmad007 @:ここではクラッシュログです:[リンク] http://sv.tinypic.com/r/29bylw2/9 –

答えて

1

は、これらを一緒

  android:imeOptions="actionDone" 
      android:inputType="number" 
      android:maxLines="1" 
+0

Numbersを 'inputType'として使用して、テキストの書き込みを防ぎます。それは数字でも機能しますか?編集:私はTextViewとEditTextの間のスワップを行った後、私は 'inputType'を入れていないことを知った。それも試してみましょう。 –

+0

今はうまく動作します。私は上記の設定を持っており、それ以上の問題は全くありません。 –

1

さて、あなたは "ENTER" キーを押すと、テキストは、それはむしろ、消去されません。シフトアップ。 Enterキーを押した後、上矢印キーを押すとテキストが表示されます。問題は、「修正」ボタンのために書いたロジックにある可能性があります。 「修正」ボタンを押したときに実行されるコードを共有してください

更新---後ろのスペースを削除するにはtrim()メソッドを使用してみてください。あなたは数学関連のアプリを開発しているので、あなたが数字を受け入れるためにあなたのEditTextを制限することができ

Integer.parseInt(editTextEasyResult.getText().toString().trim()); 

もう一つの提案は、次のとおりです。あなたはint型に値を解析しているので、余分なスペースは、このような問題の何かを引き起こしている可能性がありますのみ。編集テキストファイルの次の属性に言及してください:

android:inputType="number" 

このようにすると、入力キーなしでユーザーに数値キーボードが表示されます。

+0

「修正ボタン」に関連するonClickコードを更新しました。 –

+0

これに問題が見つかりました。しかし、それを解決する方法を知らない。数字が上にずれて見えなくなるとあなたが言ったように、あなたはenterを押すと問題が発生します。これはまた、スペースを作成します。 "修正ボタン"を押す前に領域を削除/削除しないと、アプリケーションは動作を停止します。 –

+0

'trim()'は、アプリケーションのクラッシュ/ストップを防ぎます。 Enterキーを押したときにどうやってそれが上がるのを完全に止めるのですか? –

関連する問題