活动开始时禁用按钮

时间:2018-10-03 07:33:00

标签: android button

我有一些与我的按钮关联的值,该值与数据库中的特定字段链接。

如果该字段不是Null,如何禁用按钮(不单击)。

我试图这样做:

public class MainActivity extends AppCompatActivity {
Button button;
String service_id = "65";
String indate = "29/03/2018";
String intransit = "2018-03-21 15:00:00.000";

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

    button = (Button) findViewById( R.id.Enter );

    button.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            new Background().execute();
            //new Enter().execute();
        }
    } );

}

private class Background extends AsyncTask<String, Void, String>{
    String url;
    @Override
    protected String doInBackground(String... strings) {
        url = "http://localhost/check.php";

        try {
            URL urL = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) urL.openConnection();
            conn.setRequestMethod( "POST" );
            conn.setDoInput( true );
            conn.setDoOutput( true );
            OutputStream out = conn.getOutputStream();
            BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( out, "UTF-8" ) );
            String data = URLEncoder.encode( "service_id", "UTF-8" ) + "=" + URLEncoder.encode( service_id, "UTF-8" ) + "&"
                    + URLEncoder.encode( "indate", "UTF-8" ) + "=" + URLEncoder.encode( indate, "UTF-8")+ "&"
                    + URLEncoder.encode( "intransit", "UTF-8" ) + "=" + URLEncoder.encode( intransit, "UTF-8");

            writer.write( data );
            writer.flush();
            writer.close();
            out.close();

            InputStream in = conn.getInputStream();
            BufferedReader reader = new BufferedReader( new InputStreamReader( in, "iso-8859-1" ) );
            String result = "";
            String line = "";

            while((line =reader.readLine()) != null){
                result += line;
            }
            reader.close();
            in.close();
            conn.disconnect();
            return result;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    @Override
    protected void onPostExecute(String result){
        Log.e(TAG, "Result ="+result);
        if(result.equals( "Disabled" )){
            button.setEnabled( false );
        }else{
            Toast.makeText( MainActivity.this, "Updated", Toast.LENGTH_SHORT ).show();
            button.setEnabled( false );
            }
        }
    }
}

在此代码中: 在这里,当“活动开始”按钮仍然启用并且要禁用它时,我必须单击它。

请裸露我的英语。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

Android提供了两种方法来实现相同的目标-

1. button.setClickable(false)

如果您使用此按钮,按钮将不响应任何点击事件。

2. button.setEnabled(false)

使用此按钮不仅不可单击,而且还直观地表明按钮已禁用。

根据空检查(条件),您可以轻松实现此目标。 谢谢。

答案 1 :(得分:0)

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

    button = (Button) findViewById( R.id.Enter );
    if(field != null) {
        button.setEnabled(false); // Or use setClickable(false) if you still want to show the button as not opaque
    }

    button.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Background().execute();
            //new Enter().execute();
        }
    } );

}

一种更好的做法是隐藏按钮而不是禁用它,但是我不知道您需要做什么,因此请使用上面的代码