2017-05-03 1 views
-1

基本的には、editTextビューの文字列を配列に格納し、ランダムに選択した配列要素の値を戻します。 editTextビューは動的に追加したり削除したりすることができるので、これを考慮する必要がありました。私は私の方法を超え、私が間違っていることを見つけることができません。editTextビューの内容をストアド・アレイからランダムに選択します

問題はgetAnswer()です。現在、このアプリをクラッシュさ

のJava:

パブリッククラスMainActivityがAppCompatActivity { プライベートのLinearLayout mEditTextContainerを拡張します。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mEditTextContainer = (LinearLayout)findViewById(R.id.linearLayoutDecisions); 
    setContentView(activity_main); 

    //Button to choose random editText contents 
    final Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getAnswer(); 
     } 
    }); 

    //Button to add editText Field 
    final Button add_button = (Button) findViewById(R.id.add_button); 
    add_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Add_Line(); 
     } 
    }); 

    //Button to remove editText Field 
    final Button remove_button = (Button) findViewById(R.id.remove_button); 
    remove_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Remove_Line(); 
     } 
    }); 
} 


public void Add_Line() { 
    LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayoutDecisions); 
    // add edittext 
    EditText et = new EditText(this); 
      LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT); 
    et.setLayoutParams(p); 
    et.setText(null); 
    et.setHint("Enter Answer #" + (mEditTextContainer.getChildCount()+1)); 
    et.setGravity(Gravity.CENTER); 
    mEditTextContainer.addView(et); 
} 

public void Remove_Line() { 
    int count = mEditTextContainer.getChildCount(); 

    if(count == 2) 
     return; 
    else 
     mEditTextContainer.removeViewAt(mEditTextContainer.getChildCount()-1); 
} 


public void getAnswer() { 
    //get number of possible answers 
    int count = mEditTextContainer.getChildCount(); 

    //create array to hold answers 
    String[] options = new String[count--]; 

    //create temporary view to store editText view contents 
    View tempView; 

    //Loop to collect and store editText contents 
    for(int i = 1; i < count-1; i++) { 
     tempView = mEditTextContainer.getChildAt(i); 
     if(tempView instanceof EditText){ 
      String tempText = ((EditText) tempView).getText().toString(); 
       if(tempText != null){ 
        options[i] = tempText; 
       } 
       else 
        return; 
     } 
    } 

    int number = (int)(Math.random() * count-1); 
    String answer = options[number]; 
    TextView answerBox = (TextView)findViewById(R.id.textView7); 
    answerBox.setText(answer); 
} 
} 
+0

アプリがクラッシュした場合は、ご質問にエラー/スタックトレースを含めてください。 –

+0

Androidスタジオにはまったく新しい機能がありますが、その方法はわかりません。しかし、なぜそれがクラッシュしているのか分かりました。setContentView(activity_main)の前にコードを入れました。 onCreateメソッドでしかし、getAnswer()メソッドでもヘルプを使用することができます。 – JamaicanMeCode

答えて

0

好奇心をそそる人のために、私は答えを見つけました。私のメソッドでは、変数 'c​​ount'は1ずつ減るべきではありません。これを変更すると全体が固定されました。

関連する問題