Staram się stworzyć prostą aplikację, która może przechowywać wyniki w grze dla czterech graczy. Po naciśnięciu przycisku plus lub minus otwiera się nowe działanie (motyw okna dialogowego), w którym użytkownik powinien wprowadzić swój wynik. Ta partytura powinna być przechowywana w widoku tekstowym. Część kodu wygląda następująco:

Tutaj otworzyłem nowe działania

        buttonPlus1.setOnClickListener(this);
        buttonPlus2.setOnClickListener(this);
        buttonPlus3.setOnClickListener(this);
        buttonPlus4.setOnClickListener(this);
        buttonMinus1.setOnClickListener(this);
    }
            @Override
            public void onClick(View v) {

            switch (v.getId()) {
                case R.id.buttPlusPlayer1:

                    Intent i = new Intent(this, SecondActivity.class);
                    startActivityForResult(i, 1);
                    break;

                case R.id.buttPlusPlayer2:
                    Intent i2 = new Intent(this, ThirdPlusActivity.class);
                    startActivityForResult(i2, 2);
                    break;

                case R.id.buttPlusPlayer3:
                    Intent i3 = new Intent(this, FourthPlusActivity.class);
                    startActivityForResult(i3, 3);
                    break;

                case R.id.buttPlusPlayer4:
                    Intent i4 = new Intent(this, FifthPlusActivity.class);
                    startActivityForResult(i4, 4);
                    break;

                case R.id.buttMinusPlayer1:
                    Intent i5 = new Intent(this, FirstMinusActivity.class);
                    startActivityForResult(i5, 1);
            }
            }

To przykład, w jaki sposób działania wysyłają dane z powrotem do głównego działania

public class SecondActivity extends AppCompatActivity {
    private EditText mEditText;
    private ImageButton mBackSpace;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        setTitle("ADD POINTS");
        mEditText = findViewById(R.id.editTxtActivity);



        //implementing backspace button

        mBackSpace = findViewById(R.id.backSpaceButton);
        mBackSpace.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = mEditText.getText().toString();
                if (str.length() > 0) {
                    str = str.substring(0, str.length() - 1);
                    mEditText.setText(str);
                }
            }
        });

    }

    @Override
    public void onBackPressed() {

                Intent i = new Intent();
                i.putExtra("message", mEditText.getText().toString());
                setResult(RESULT_OK, i);
                Toast.makeText(this, "You added " + mEditText.getText().toString() + " points", Toast.LENGTH_LONG).show();
            finish();



            }


    }

I „teraz” otrzymuję wyniki z zajęć

   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {


        if (requestCode == 1 && resultCode == RESULT_OK)   {
        String a = data.getStringExtra("message");
        int i =Integer.parseInt(a);
        String b = data.getStringExtra ("message5");
        int z = Integer.parseInt(b);
        Integer fResult = i - z;
        String firstResult = fResult.toString();
        mFirstScore.setText(firstResult);
            }

        if (requestCode == 2 && resultCode == RESULT_OK) {
            mSecondscore.setText(data.getStringExtra("message2"));
        }
        if (requestCode == 3 && resultCode == RESULT_OK) {
            mThirdScore.setText(data.getStringExtra("message3"));
        }

        if (requestCode == 4 && resultCode == RESULT_OK) {
            mFourthscore.setText(data.getStringExtra("message4"));
        }

Problem dotyczy ostatniej części kodu, ponieważ nie wiem, jak otrzymać dane z działań i jak obliczyć wynik. Chcę, gdy użytkownik naciśnie przycisk plusa, aby dodać liczby, a kiedy zostanie kliknięty minusButton, aby odjąć, a wynik zostanie zapisany w TextView, który dla player1, w moim przypadku to mFirstScore. Czy jest to możliwe, czy też zrobiłem wszystko źle i nie można manipulować danymi otrzymanymi z innego działania w taki sposób, jak sobie wyobrażam

PS: na case buttMinusPlayer1 i na pierwszym if z requestCode 1 próbowałem czegoś;

0
Azkan 19 listopad 2019, 17:59
Stwórz jeden interfejs i zaimplementuj we wszystkich działaniach, zamiast używać activityForResult
 – 
Danial clarc
19 listopad 2019, 18:02

1 odpowiedź

W SecondActivity połóż swój klucz message2

@Override
public void onBackPressed() {

    Intent i = new Intent();
    i.putExtra("message2", mEditText.getText().toString());
    setResult(RESULT_OK, i);
    finish();       
}

I pobierz dane z SecondActivity za pomocą tego samego klucza message2

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 2 && resultCode == RESULT_OK) {

        mSecondscore.setText(data.getStringExtra("message2"));
    }
}

Mam nadzieję że to pomoże.

2
GuanHongHuang 19 listopad 2019, 18:30