在 Android 中更改多操作按钮中的文本

Posted

技术标签:

【中文标题】在 Android 中更改多操作按钮中的文本【英文标题】:Change text in multi action buttons in 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 工作? 【参考方案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 让我们continue this discussion in chat。【参考方案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 下,它给出了错误。 全部修复。无论如何,谢谢

以上是关于在 Android 中更改多操作按钮中的文本的主要内容,如果未能解决你的问题,请参考以下文章

从按钮操作中更改时未触发 SwiftUI 绑定

Android AppCompat 更改材质按钮的文本颜色

从android中的对话框更改TextView文本

如何在android中的开关按钮及其文本之间放置空格?

更改片段中按钮的文本

按下时更改按钮文本颜色