Java 如何仅传递用户选择的字符串

Java 如何仅传递用户选择的字符串,java,android,Java,Android,当我单击一个按钮时,我需要该按钮只传递选定的字符串 TruthOrDare1.putExtras(getIntent()); TruthOrDare2.putExtras(getIntent()); 如果整数是2,我尝试传递一个特定的字符串 TruthOrDare1.putExtras(getIntent()); TruthOrDare2.putExtras(getIntent()); 这是我的第一个名为PlayerChoose的活动: //PI1 and PI2 is String

当我单击一个按钮时,我需要该按钮只传递选定的字符串

TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());
如果整数是2,我尝试传递一个特定的字符串

TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());
这是我的第一个名为PlayerChoose的活动:

    //PI1 and PI2 is Strings from another Activity.
    PI1 = getIntent().getStringExtra("Player1Text");
    PI2 = getIntent().getStringExtra("Player2Text");

    //These bellow are buttons.
    Player1Btn = findViewById(R.id.PlayerToD1);
    Player2Btn = findViewById(R.id.PlayerToD2);

    //These Integers is to set 0 so the app is not broken.
    PlayerInt1 = 0;
    PlayerInt2 = 0;

    //Here im setting text to the buttons so you know what player you pick
    Player1Btn.setText(PI1);
    Player2Btn.setText(PI2);

    //These button adds 1 to the Integer PlayerInt1 so if you hit it 
    //twice it executes what is in the if statement.
    Player1Btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PlayerInt1++;
            if (PlayerInt1 == 2) {
    Intent TruthOrDare1 = new Intent(PlayerChoose.this,TruthOrDare.class);
                TruthOrDare1.putExtras(getIntent());
                TruthOrDare1.putExtra("Player1Text", PI1);
                startActivity(TruthOrDare1);
            }
        }
    });
    //Same button as Player1Btn Does the same things.
    Player2Btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PlayerInt2++;
            if (PlayerInt2 == 2) {
    Intent TruthOrDare2 = new Intent(PlayerChoose.this,TruthOrDare.class);
                TruthOrDare2.putExtras(getIntent());
                TruthOrDare2.putExtra("Player2Text", PI2);
                startActivity(TruthOrDare2);
            }
        }
    });

    }
 }
TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());
这是我的第二项活动,名为TruthOrDare:

    //PI1 Should take what i passed with "Player1Text" and save it as a 
    //String
    //PI2 Should take what i passed with "Player2Text" and save it as a 
    //String
    PI1 = getIntent().getStringExtra("Player1Text");
    PI2 = getIntent().getStringExtra("Player2Text");


    //PlayerTurnName1 and PlayerTurnName2 is textviews 
    PlayerTurnName1 = findViewById(R.id.PlayerTurnText1);
    PlayerTurnName2 = findViewById(R.id.PlayerTurnText2);

    //Here i set text to textview whatever have been passes PI1 or PI2
    //Depending
    PlayerTurnName1.setText(PI1);
    PlayerTurnName2.setText(PI2);
TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());

我的问题是,只有当我在PlayerChoose活动中点击Player1Btn时,它才能传递两个字符串PI1、PI2而不是PI1,如果我点击Player2Btn,它才能传递PI2。如果我点击Player1Btn,我怎么能只传递PI1,如果我点击PI2,它就传递PI2。

似乎你有不必要的字符串

TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());

在click listeners中,它同时添加了PI1和PI2,因此在第一个名为PlayerChoose的活动中很简单,您可以创建另一个名为PIP1的字符串作为示例,因此您必须这样做:

TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());
  //So Put PI1 as default string of PIP1.
  PIP1 = PI1;
  //Then in the Buttons OnClickListeners 
  Player1Btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PlayerInt1++;
            //If you click this button it will set PIP1 to the string you want to 
            //pass in this case PI1
            PIP1 = PI1;
            if (PlayerInt1 == 2) {
          Intent TruthOrDare1 = new Intent(PlayerChoose.this, TruthOrDare.class);
                TruthOrDare1.putExtras(getIntent());
                //Intead of putting the text itself you put PIP1 thats changing 
                //depens on what button you click
                TruthOrDare1.putExtra("PlayerText", PIP1);
                startActivity(TruthOrDare1);
            }
        }
    });
    Player2Btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            PlayerInt2++;
            //And here you Change the same string PIP1 to PI2
            //Here you change the PIP1 to PI2 so PIP1 change to PI2 and not PI1
            PIP1 = PI2;
            if (PlayerInt2 == 2) {
           Intent TruthOrDare2 = new Intent(PlayerChoose.this, TruthOrDare.class);
                TruthOrDare2.putExtras(getIntent());
                TruthOrDare2.putExtra("PlayerText", PIP1);
                startActivity(TruthOrDare2);
            }
        }
    });
在第二个名为TruthOrDare的活动中,您可以更改以下内容:

TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());
    //So you only have 1 String Instead of 2 with 1 key 
    PI1 = getIntent().getStringExtra("PlayerText");


    //One TextView
    PlayerTurnName1 = findViewById(R.id.PlayerTurnText1);



    PlayerTurnName1.setText(PI1); 

概念是每次按下按钮时PIP1都会改变,因此不会传递所有值。

我可以知道,如果用户按下播放器1BTN的按钮,TextViewP2应该显示值?无论我按下1或2按钮,它都会将文本设置为PI2,我尝试添加3按钮,看看这是否是问题所在,它会设置为PI3,所以它只会设置为最后一个值,我不确定为什么这行:trutorDare2.putExtrasgetIntent;-当返回到第二个活动时,这会将Player1Text和Player2Text与文本字段文本一起放回到意图中,使用相同的键。如果他单击Player1Btn only pass PI1,我只想通过选择要通过的,如果他单击Player2Btn only pass PI2,我会找到另一种方法来做同样的事情,我会将其作为答案发布,但如果你有其他方法,你可以发布我有没有尝试过这种方法,只是删除不必要的代码?为什么这些代码是不必要的?我真的不知道我是从Youtube上学到的,所以我会像我看到的那样去做。我会使用我的代码,因为我需要传递其他类似的名称,但如果你确定我可以让你的问题是正确的,我会在将来阅读所有这些代码。我明白你的意思你的解决方案中有没有提到这一点。当你真的不知道发生了什么时,这是一个糟糕的方法。这两条线仍然没有必要。试着参考更多的文档,而不是从youtube视频中盲目复制代码。不管怎样,你能让你的应用程序正常工作真是太棒了!
TruthOrDare1.putExtras(getIntent());
TruthOrDare2.putExtras(getIntent());