【问题标题】:Change text in multi action buttons in Android在 Android 中更改多操作按钮中的文本
【发布时间】:2017-12-14 23:09:54
【问题描述】:

我有一个 Android 应用程序,如果用户创建一个帐户,他们点击“创建一个帐户”按钮,它会将他们带到第二个活动 (DriverDetailsActivity) 以填写表格。表单完成后,用户将单击“更新”按钮,这会将他们返回到 LoginActivity,并且“创建帐户”文本应更改为“注册”,但它不起作用。

我提供的代码不起作用。

登录活动:

final Button mRegisterButton = (Button)findViewById(R.id.email_registration_button);
    mRegisterButton.setTag(1);
    mRegisterButton.setText("Create an Account");
    mRegisterButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick (View v) {
            final int status = (Integer) v.getTag();
            if (status == 1) {
                Intent intent = new Intent(getBaseContext(), DriverDetailsActivity.class);
                startActivity(intent);
                mRegisterButton.setText("Register");
            }
        }
    });

DriverDetailsActivity(第二个活动)

        // Once completed all fields, user is sent back to DriverLoginActivity
    update.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(DriverDetailsActivity.this, DriverLoginActivity.class);
            startActivity(intent);
        }
    });

我该怎么做?

【问题讨论】:

  • 您在 onCreate 或 onResume 的 LoginActivity 工作?

标签: android button android-activity


【解决方案1】:

我们用 startActivityForResult(intent,requestCode) 代替 startActivity

当你想去一个活动并得到一些结果时,这个方法专门使用。

这样使用:

在活动A中

startActivityForResult(intent,100);

在活动 B 中,当您完成任务时,您所做的是

setResult(RESULT_OK);
finish();

在活动 A 中,您覆盖此方法:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 100 && resultCode == RESULT_OK) {
        //Do your work here
    }
}

显然你也可以通过 setResult(RESULT_CANCELLED) 来通知结果不正确。

希望这会有所帮助。

【讨论】:

  • 只是为了澄清我将这些放在正确的区域:startActivityForResult(intent, 100) 正在替换 startActivity(intent)。 setResult(...) 在 Intent intent ...?? 之前
  • 是的。 100 实际上是一个请求代码,可以更改为任何值。然后在 onActivityResult 中,如果它来自我们发送的相同请求代码,我们会匹配它。
  • 完美。!!编码愉快。
  • 不,不要再次开始活动。从活动中删除 Intent 意图 b
【解决方案2】:

为此,您可以使用 startActivityForResult() 从 DriverDetailsActivity 获取结果并更新 onActivityResult 中的文本。

欲了解更多信息,请查看这些链接

https://developer.android.com/training/basics/intents/result.html

How to use StartActivityForResult()

【讨论】:

    【解决方案3】:

    试试这个

    登录活动:

    if( getIntent().getExtras() != null) {
                btnOne.setText(getIntent().getStringExtra("BACK"));
            }else{
                btnOne.setText("Create");
            }
    
    
            btnOne.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(btnOne.getText().toString().equalsIgnoreCase("Create")){
                        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                        startActivity(intent);
                    }else{
                        //do registration
                    }
                }
            });
    

    DriverDetailsActivity(第二个活动)

    btnTwo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        Intent intent = new Intent(SecondActivity.this,MainActivity.class);
                        intent.putExtra("BACK","Register");
                        startActivity(intent);
                }
            });
    

    【讨论】:

    • 阿诺德布朗 这不起作用。一直给我一个应用程序已停止的错误。我将 getIntent .. (LoginActivity) 放在 onCreate 的 setContentView 下,它给出了错误。
    • 全部修复。无论如何,谢谢
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    相关资源
    最近更新 更多