Java setTextColor()-逻辑错误

Java setTextColor()-逻辑错误,java,android,Java,Android,您好,我的简单Android应用程序有问题,它无法更改其他活动中的文本颜色,即displayActivity.java这是我的代码示例 问题是如果两个文本都相等,它将变为绿色success 但它确实变成了红色错误 MainActivity.java public class MainActivity extends AppCompatActivity { public static final String xy = "ict402.germio.intent"; public static f

您好,我的简单Android应用程序有问题,它无法更改其他活动中的文本颜色,即
displayActivity.java
这是我的代码示例

问题是如果两个文本都相等,它将变为绿色
success
但它确实变成了红色
错误

MainActivity.java

public class MainActivity extends AppCompatActivity {
public static final String xy = "ict402.germio.intent";
public static final String xz = "ict402.germio.intent";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

    public void send(View view){

        EditText a = findViewById(R.id.a);
        EditText b = findViewById(R.id.b);

        String strx =(a.getText().toString());
        String stry =(b.getText().toString());


        if (strx.compareToIgnoreCase(stry) == 0)
        {
            // this line WILL print

            Intent i = new Intent(this, displayActivity.class);

            String t = ("Case Ignored \n VALUES ARE THE SAME CONGRATS!").toString();
            i.putExtra(xy,t);
            startActivity(i);


        } else {
            Intent i = new Intent(this, displayActivity.class);

            String y = ("Case Ignored \n VALUES ARE NOT THE SAME SORRY!").toString();
            i.putExtra(xz,y);
            startActivity(i);

        }


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



    Intent i = getIntent();
    String message = i.getStringExtra(MainActivity.xy);
    TextView t = findViewById(R.id.x);
    t.setTextColor(getResources().getColor(R.color.success));
    t.setText(message);



    Intent o = getIntent();
    String msg = o.getStringExtra(MainActivity.xz);

    TextView q = findViewById(R.id.x);
    q.setTextColor(getResources().getColor(R.color.error));
    q.setText(msg);





    }
}
displayActivity.java

public class MainActivity extends AppCompatActivity {
public static final String xy = "ict402.germio.intent";
public static final String xz = "ict402.germio.intent";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

    public void send(View view){

        EditText a = findViewById(R.id.a);
        EditText b = findViewById(R.id.b);

        String strx =(a.getText().toString());
        String stry =(b.getText().toString());


        if (strx.compareToIgnoreCase(stry) == 0)
        {
            // this line WILL print

            Intent i = new Intent(this, displayActivity.class);

            String t = ("Case Ignored \n VALUES ARE THE SAME CONGRATS!").toString();
            i.putExtra(xy,t);
            startActivity(i);


        } else {
            Intent i = new Intent(this, displayActivity.class);

            String y = ("Case Ignored \n VALUES ARE NOT THE SAME SORRY!").toString();
            i.putExtra(xz,y);
            startActivity(i);

        }


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



    Intent i = getIntent();
    String message = i.getStringExtra(MainActivity.xy);
    TextView t = findViewById(R.id.x);
    t.setTextColor(getResources().getColor(R.color.success));
    t.setText(message);



    Intent o = getIntent();
    String msg = o.getStringExtra(MainActivity.xz);

    TextView q = findViewById(R.id.x);
    q.setTextColor(getResources().getColor(R.color.error));
    q.setText(msg);





    }
}

您没有使用任何条件逻辑来确定要使用的颜色

您需要这样做:

TextView t = findViewById(R.id.x);
String successMessage = getIntent().getStringExtra(MainActivity.xy);
String errorMessage = getIntent().getStringExtra(MainActivity.xz);

if(successMessage != null){
    t.setTextColor(getResources().getColor(R.color.success));
    t.setText(successMessage);
}else if(errorMessage != null){
    t.setTextColor(getResources().getColor(R.color.error));
    t.setText(errorMessage);
}
更好的方法是通过发送一个布尔值来帮助您确定要设置的颜色。以下是一个例子:

Intent i = new Intent(this, displayActivity.class);
if (strx.equalsIgnoreCase(stry)){
     i.putExtra("message","Case Ignored \n VALUES ARE THE SAME CONGRATS!");
     i.putExtra("success", true);
} else {
     i.putExtra("message","Case Ignored \n VALUES ARE NOT THE SAME SORRY!");
     i.putExtra("success", false);
}
startActivity(i);
在其他活动中,请执行以下操作:

TextView t = findViewById(R.id.x);
Intent i = getIntent();
String message = getIntent().getStringExtra("message");
boolean success = getIntent().getBooleanExtra("success");
t.setText(message);
t.setTextColor(getResources().getColor(success ? R.color.success : R.color.error));

有那么多事情不对劲。这里有一个替代品:

public void send(View view) {
    String editTextAContents = findViewById(R.id.a).getText().toString();
    String editTextBContents = findViewById(R.id.b).getText().toString();

    Intent intent = new Intent(this, DisplayActivity.class);

    if (editTextAContents.equalsIgnoreCase(editTextBContents)) {
        intent.putExtra("message", "Case Ignored \n VALUES ARE THE SAME CONGRATS");
        intent.putExtra("error", false);
    } else {
        intent.putExtra("ict402.germio.intent", "Case Igored \n VALUES ARE NOT THE SAME SORRY!");
        intent.putExtra("error", true);
    }

    startActivity(intent);
}
在显示活动中:

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

    Intent intent = getIntent();

    String message = intent.getStringExtra("message");
    boolean hasError = intent.getBooleanExtra("error", false);

    TextView textView = findViewById(R.id.x);

    textView.setText(message);

    if (hasError) {
        textView.setTextColor(ContextCompat.getColor(this, R.color.error));
    } else {
        textView.setTextColor(ContextCompat.getColor(this, R.color.success));
    }
}
填充
Intent
的附加项时,它们必须具有不同的名称

当您声明变量时,请更加详细,而不是将它们命名为x、y、z、a、b、c,这样它们更具可读性