android - 如果条件为真,如何在android中启用按钮?

标签 android

我有 4 个名为 a1、a2 和 a3 的 xml,然后还有一个主 xml。在 a1 中有一个 editText 和一个 ok 按钮,在 a2 中有一个“禁用”的 ok 按钮。现在,我想要发生的是当 a1 中输入的数据正确时,它将继续到 a2,然后那里的“禁用”按钮现在应该“启用”。现在我的程序发生了什么,它已经在运行,除了 a2 中的按钮被启用,但它会立即返回到被禁用状态。如何防止它在启用后被禁用?我是 android 的新手,所以请尽可能简单地解释它。提前致谢。

这是我的代码

主要 Activity .java

package com.example.myact1;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {



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

    Button btnClose = (Button) findViewById(R.id.btnExit);
    btnClose.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {

            finish();
            System.exit(0);
        }
    });


    Button page1 = (Button) findViewById(R.id.btn1);
    page1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
    Intent myIntent = new Intent(view.getContext(), a1.class);
   startActivityForResult(myIntent, 0);


    }

});

}

主 Activity .xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<Button
    android:id="@+id/btnExit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_marginBottom="45dp"
    android:text="Exit" />

<Button
    android:id="@+id/btn1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/btnExit"
    android:layout_alignLeft="@+id/btnExit"
    android:layout_marginBottom="30dp"
    android:text="enter" />

a1 xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/btna1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="155dp"

    android:text="Enter" />

<EditText
    android:id="@+id/eta1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/btna1"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="52dp"
    android:ems="10" >

    <requestFocus />
</EditText>

a1.java

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

    Button page1 = (Button) findViewById(R.id.btna1);
    page1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            EditText a1et = (EditText) findViewById(R.id.eta1);
            String a1 = a1et.getText().toString();
            if (a1.equalsIgnoreCase("abcde")) {
                Toast.makeText(getApplicationContext(), "correct", Toast.LENGTH_SHORT).show();
                Intent myIntent = new Intent(view.getContext(), a2.class);
                startActivityForResult(myIntent, 0);

                //enables the button in a2
                setContentView(R.layout.a2);
                Button stage2 = (Button) findViewById(R.id.btna2);
                stage2.setClickable(true);
                stage2.setEnabled(true);
            } else {
                Toast.makeText(getApplicationContext(), "wrong", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

这是我的 a2.java 的代码

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

a2.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<Button
    android:id="@+id/btna2"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="102dp"
    android:clickable="false"
    android:enabled="false"
    android:text="enter" />

最佳答案

另加

stage2.setEnabled(true);

右下方:

Button stage2 = (Button) findViewById(R.id.btna2);
stage2.setClickable(true);

编辑 在查看了您的所有代码后,我对您的代码进行了两处更正以使其正常工作:

去掉a1.java中的这部分代码:

//enables the button in a2
setContentView(R.layout.a2);
Button stage2 = (Button) findViewById(R.id.btna2);
stage2.setClickable(true);
stage2.setEnabled(true);

还记得我们决定使用新 Activity 而不更改当前 Activity 的 contentView 吗?因为您有这段代码,所以按钮在再次被禁用之前显示为启用了一小会儿。

更改a2.java#onCreate的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.a2);
    Button stage2 = (Button) findViewById(R.id.btna2);
    stage2.setEnabled(true);    
}

这里您没有启用按钮,那是您的问题。渲染 a2 Activity 你会用一个新的 View 覆盖你已经在 a1 Activity 中渲染的 View 。一个按钮再次被禁用。我用这段代码更正了这一点。

关于android - 如果条件为真,如何在android中启用按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162309/

相关文章:

javascript - 应用程序错误是一个目录(文件 :///#android_asset/www/index. html)

android - 如何在聊天应用程序中将 FirebaseRecyclerAdapter 用于两个项目布局

android - 解释 Logcat 条目 : threadid=8: still suspended after undo (sc=1 dc=1 s=Y)

java - 没有这样的表..当我在 android eclipse 中修改表时

Android自定义圆形ProgressBar方向

android - 如何在 Android Studio 的项目中找到所有硬编码字符串

使用 Cygwin 构建 Android NDK 应用程序失败 "arguments list too long"

android - 房间数据库 : What is Index specific columns (indices and @Index) and how to use it?

android - 即使协程上下文不是 Dispatchers.Main,runBlocking(Dispatchers.IO) 是否也会阻塞主线程?

android - fragment 未显示在框架布局中