Search code examples
androidandroid-studiofor-loopbuttontextview

How to multiply displayed TextView Integer values on multiple buttons click


i have 10 buttons with 2 columns like 5x2. These 2 columns contains for loops with 5 buttons each with textviews for each column and when user clicks any button of these 2 columns 2 textview integers are displayed. I wanna multiply these displayed numbers to get final result in 3rd Textview but its not multiplying, below is the code I written:

public class MultiplicationActivity extends AppCompatActivity{
    private static final int[] column1_buttonsArrays = {R.id.column1_button0, R.id.column1_button1, R.id.column1_button2, R.id.column1_button3, R.id.column1_button4};
    private Button[] c1_buttons = new Button[column1_buttonsArrays.length];
    int i1;
    private static final int[] column2_buttonsArrays = {R.id.column2_button0, R.id.column2_button1, R.id.column2_button2, R.id.column2_button3, R.id.column2_button4};
    private Button[] c2_buttons = new Button[column2_buttonsArrays.length];
    int i2;
    int num1, num2, solution1;
    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.multiplication);
        
           dummyTextValue1 = findViewById(R.id.dummy_value1);
           dummyTextValue2 = findViewById(R.id.dummy_value2);
           multipliedText = findViewById(R.id.multiplied_value);
        
           for(i1 = 0; i1 < column1_buttonsArrays.length; i1++) {
           c1_buttons[i1] = findViewById(column1_buttonsArrays[i1_buttons]);
           c1_buttons[i1].setOnClickListener(new View.OnClickListener() {
           @Override
             public void onClick(View view) {
             switch (view.getId()) {
             case R.id.column1_button0:
                 dummyTextValue1.setText("0");
                 break;
             case R.id.column1_button1:
                 dummyTextValue1.setText("1");
                 break;
             case R.id.column1_button2:
                 dummyTextValue1.setText("2");
                 break;
             case R.id.column1_button3:
                 dummyTextValue1.setText("3");
                 break;
             case R.id.column1_button4:
                 dummyTextValue1.setText("4");
                 break;
                }
            }
        });
    }
            for(i2 = 0; i2 < column2_buttonsArrays.length; i2++) {
            c2_buttons[i2] = findViewById(column2_buttonsArrays[i2_buttons]);
            c2_buttons[i2].setOnClickListener(new View.OnClickListener() {
            @Override
              public void onClick(View view) {
              switch (view.getId()) {
             case R.id.column2_button0:
                 dummyTextValue2.setText("0");
                 break;
             case R.id.column2_button1:
                 dummyTextValue2.setText("1");
                 break;
             case R.id.column2_button2:
                 dummyTextValue2.setText("2");
                 break;
             case R.id.column2_button3:
                 dummyTextValue2.setText("3");
                 break;
             case R.id.column2_button4:
                 dummyTextValue2.setText("4");
                 break;
                }
            }
        });
    }
    String value1 = dummyTextValue1.getText().toString();
    String value2 = dummyTextValue2.getText().toString();
    num1 = Integer.parseInt(value1);
    num2 = Integer.parseInt(value2);
    solution1 = (int) (num1 * num2);
    multipliedText.setText(solution1);
  }
}

Not understanding where I'm doing wrong. Please give me an idea or updated code that how can I get multiplied displayed values from for loop. Thanks in advance..


Solution

  • The problem is your solution variable is an integer. solution1 = (int) (num1 * num2);

    In android, TextView.setText(int resource) can be used to set a String resources in the TextView. You will want to use TextView.setText(String text). Check the documentation

    You can do that like this:

    multipliedText.setText(String.valueOf(solution1));
    

    The other problem is that multipliedText.setText() is executed as soon as the Activity is created. E.g. both dummyValues will be empty. You need execute this line, after the buttons are clicked.

    Something like this:

    dummyTextValue1.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View v) {
            switch (view.getId()) {
                 //..
            }
    
            String value1 = dummyTextValue1.getText().toString();
            String value2 = dummyTextValue2.getText().toString();
            updateText(value1, value2);
       }
    });
    
    private void updateText(String value1, String value2, TextView textView) {
    
        num1 = Integer.parseInt(value1);
        num2 = Integer.parseInt(value2);
        solution1 = (int) (num1 * num2);
        textView.setText(String.valueOf(solution1));
    }
    

    This will call updateText everytime one of the buttons is clicked, and hence, update your text. Good luck