【问题标题】:How to pass a boolean value between activities with intents [duplicate]如何在具有意图的活动之间传递布尔值[重复]
【发布时间】:2017-05-12 17:05:00
【问题描述】:
public class StartActivity extends AppCompatActivity {

    private boolean addition=true;
    private boolean subtraction=false;
    private boolean multiplication=false;
    private boolean division=false;

    public static final String ADDITION = "";
    public static final String SUBTRACTION = "";
    public static final String MULTIPLICATION= "";
    public static final String DIVISION = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        final Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);

        CheckBox additionCheckBox = (CheckBox)findViewById(R.id.additionCheckBox);
        CheckBox multiplicationCheckBox = (CheckBox)findViewById(R.id.multiplicationCheckBox);
        CheckBox divisionCheckBox = (CheckBox)findViewById(R.id.divisionCheckBox);
        CheckBox subtractionCheckBox = (CheckBox)findViewById(R.id.subtractionCheckBox);

        Button playButton = (Button)findViewById(R.id.playButton);

        additionCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(buttonView.isChecked()){
                    addition = true;
                }else{
                    addition = false;
                }
            }
        });

        multiplicationCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(buttonView.isChecked()){
                   multiplication = true;
                }else{
                    multiplication= false;
                }
            }
        });

        subtractionCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(buttonView.isChecked()){
                    subtraction = true;
                }else{
                    subtraction = false;
                }
            }
        });

        divisionCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(buttonView.isChecked()){
                    division = true;
                }else{
                    division = false;
                }
            }
        });

        playButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!addition && !subtraction && !multiplication && !division){
                    final Dialog dialog = new Dialog(StartActivity.this);
                    dialog.setContentView(R.layout.custom_dialog);
                    dialog.setTitle("My custom dialog");

                    //set the custom dialog components - text, image and button
                    TextView text = (TextView) dialog.findViewById(R.id.textView);
                    text.setText("Android custom dialog example!");


                    Button button = (Button) dialog.findViewById(R.id.button);
                    button.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                        dialog.dismiss();
                        }
                    });

                    dialog.show();
                } else{
                    Intent i = new Intent(StartActivity.this, Main2Activity.class);
                    i.putExtra(ADDITION,addition);
                    i.putExtra(SUBTRACTION,subtraction);
                    i.putExtra(MULTIPLICATION,multiplication);
                    i.putExtra(DIVISION,division);
                    startActivity(i);
                }
            }
        });
}

这是开始活动,我正在尝试将 4 个布尔变量发送到下一个活动,每个基本数学运算都有一个,以查看用户检查了哪个。但他们在下一个活动中总是错误的,我不知道为什么。这是下一个活动:

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        final Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);

        Intent i = getIntent();
        Bundle b = i.getExtras();
        boolean addition = b.getBoolean("ADDITION");
        boolean subtraction = Boolean.getBoolean("SUBTRACTION");
        boolean multiplication = b.getBoolean("MULTIPLICATION");
        boolean division = b.getBoolean("DIVISION");

        int operatorCounter =0;

        TextView additionTextView = (TextView) findViewById(R.id.additionTextView);
        TextView subtractionTextView = (TextView) findViewById(R.id.subtractionTextView);
        TextView multiplicationTextView = (TextView) findViewById(R.id.multiplicationTextView);
        TextView divisionTextView = (TextView) findViewById(R.id.divisionTextView);

        if (addition) {
            additionTextView.setText("addition:checked");
        }else{
            additionTextView.setText("addition:not checked");
        }

        if (subtraction) {
            subtractionTextView.setText("subtraction:checked");
        }else{
            subtractionTextView.setText("subtraction:not checked");
        }

        if (multiplication) {
            multiplicationTextView.setText("multiplication:checked");
        }else{
            multiplicationTextView.setText("multiplication:not checked");
        }

        if (division) {
           divisionTextView.setText("division:checked");
        }else{
          divisionTextView.setText("division:not checked");
        }   
    }
}

我正在设置文本框中的文本以查看值是否正确传递但始终为假。抱歉代码不好我在android中很新,实际上是android中的第四个迷你项目及其学校作业。

【问题讨论】:

标签: java android android-intent boolean


【解决方案1】:

我看到的问题是 id 的:

public static final String ADDITION = "";
public static final String SUBTRACTION = "";
public static final String MULTIPLICATION= "";
public static final String DIVISION = "";

这应该是不同的东西,例如:

public static final String ADDITION = "ADDITION";
public static final String SUBTRACTION = "SUBTRACTION";
public static final String MULTIPLICATION= "MULTIPLICATION";
public static final String DIVISION = "DIVISION";

并使用相同的值来检索其他活动中的值

【讨论】:

  • 您应该补充一点,既然他创建了常量,OP 也应该使用它们来获取意图中的值。
【解决方案2】:

试试这个代码来发送和获取值。

传递给第一个活动:

Intent i = new Intent(getBaseContext(), NameOfActivity.class);
i.putExtra("my_boolean_key", myBooleanVariable);
startActivity(i);

在第二个活动中检索:

Bundle bundle = getIntent().getExtras();
boolean myBooleanVariable = bundle.getBoolean("my_boolean_key");

【讨论】:

  • 问题中发布的代码实际上不是这样吗?
  • 我没听懂你说的,请解释...
  • @RC 老实说,你需要先找到线路;)但正如 petrumo 所说,问题出在钥匙上
  • @AxelH 是的,关键问题是一个很好的问题,我同意,如果有一些解释,这个答案会很棒(我认为 OP 知道怎么做,他/她的代码只有钥匙有问题)
  • @RC,公平地说,这个问题可以通过创建minimal reproducible example 来解决,这很明显。
【解决方案3】:

这是因为你没有在全局变量中设置值,所以你需要像这样设置第一个全局变量值

public static final String ADDITION = "ADDITION";
public static final String SUBTRACTION = "SUBTRACTION";
public static final String MULTIPLICATION= "MULTIPLICATION";
public static final String DIVISION = "DIVISION";

然后设置它

Intent i = new Intent(StartActivity.this, Main2Activity.class);
                i.putExtra(ADDITION,addition);
                i.putExtra(SUBTRACTION,subtraction);
                i.putExtra(MULTIPLICATION,multiplication);
                i.putExtra(DIVISION,division);
                startActivity(i);

比从其他类似活动中获得的价值

 boolean addition = getIntent().getExtras().getBoolean("ADDITION");
 boolean sub = getIntent().getExtras().getBoolean("SUBTRACTION");
 boolean mult = getIntent().getExtras().getBoolean("MULTIPLICATION");
 boolean division = getIntent().getExtras().getBoolean("DIVISION");

【讨论】:

    【解决方案4】:

    确保您使用相同的密钥来放置和获取数据。

    也更新了

    boolean subtraction = Boolean.getBoolean("SUBTRACTION");
    

    boolean subtraction = b.getBoolean("SUBTRACTION");
    

    【讨论】:

      【解决方案5】:
      Intent intent = new Intent(this, NextActivity.class);
      intent.putExtra("BoolName", true);
      startActivity(intent );
      

      从意图中检索布尔值:

       Boolean yourBool = getIntent().getExtras().getBoolean("BoolName");
      

      【讨论】:

        【解决方案6】:

        我将使用这篇文章来说明为什么 mcve 很有用,因为这是一个完美的例子,我将使用他的代码,清理无用的部分,我们会很快找到问题,我不值得或不要求赞成,但也不要反对,如果您反对这个答案,请发表评论,如果需要我会删除它。

        所以,让我们清理一下代码吧,我只对这里的Intent 创建感兴趣。因此,让我们清理其余部分并保留使用的变量/常量。为了最小化,我们只需要一个布尔值,让我们保留第一个 putBoolean。

        public class StartActivity extends AppCompatActivity {
        
        private boolean addition=true;
        
        public static final String ADDITION = "";
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_start);
        
            Button playButton = (Button)findViewById(R.id.playButton);
        
            playButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent i = new Intent(StartActivity.this, Main2Activity.class);
                    i.putExtra(ADDITION,addition);
                    startActivity(i);
                }
            });
        

        嗯,这样更好。适合一个屏幕,我们可以直接看到问题。

        恢复也是一样:

        public class Main2Activity extends AppCompatActivity {
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main2);
        
                Intent i = getIntent();
                Bundle b = i.getExtras();
                boolean addition = b.getBoolean("ADDITION");
            }
        }
        

        嗯,可以在这里使用 StartActivity.ADDITION ...

        【讨论】:

          【解决方案7】:

          希望代码对你有所帮助 Intent 意图 = new Intent(this, NextActivity.class); intent.putExtra("yourBoolName", true);

           protected void onCreate(Bundle savedInstanceState) {
          Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");
          

          }

          【讨论】:

            【解决方案8】:

            Intent intt=new Intent(this,YourAcivity.class);

            intt.putExtra("BooleanKey",true);
            startActivity(intt);
            
            
            
            
            
             protected void onCreate(Bundle savedInstanceState) {
            Boolean yourBool = getIntent().getExtras().getBoolean("yourBoolName");
            

            }

            【讨论】:

            • 宁可换个答案,更新旧答案
            猜你喜欢
            • 1970-01-01
            • 2012-03-22
            • 2011-12-07
            • 2016-10-06
            • 1970-01-01
            • 2012-10-06
            • 1970-01-01
            • 2021-04-12
            • 2017-07-03
            相关资源
            最近更新 更多