简体   繁体   English

Android setVisibility(View.VISIBLE)不显示组件

[英]Android setVisibility(View.VISIBLE) does not show the component

I'm using setVisibility() to hide some UI components at onStart() , with the aim of making them reappear under certain conditions at onActivityResult() . 我正在使用setVisibility()onStart()处隐藏一些UI组件,以使它们在onActivityResult()特定条件下重新出现。

I have set variables as global variable, and assigned to the component at onCreate() . 我将变量设置为全局变量,并在onCreate()处将其分配给组件。

Code to make the component invisible works correctly, such as auth_btn.setVisibility(View.INVISIBLE); 使组件不可见的代码可以正常工作,例如auth_btn.setVisibility(View.INVISIBLE);

However, at onActivityResult() , auth_btn.setVisibility(View.VISIBLE); 但是,在onActivityResult()auth_btn.setVisibility(View.VISIBLE); does not make the button reappear. 不会使按钮重新出现。

Code (from pastebin in the comments): 代码(来自注释中的pastebin):

private Button auth_btn = null;
private Button newAcc_btn = null;
private EditText mEdit = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Set up the window layout
    setContentView(R.layout.main);

    //instance of database adapter
    db = new DBAdapter(this);

    // Get local Bluetooth adapter
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

    // If the adapter is null, then Bluetooth is not supported
    if (mBluetoothAdapter == null) {
        Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
        finish();
        return;
    }

    auth_btn = (Button) findViewById(R.id.btn_auth);
    mEdit = (EditText)findViewById(R.id.text_username);
    newAcc_btn = (Button) findViewById(R.id.btn_newAcc);

    //read every entry from database
    db.load();
}

@Override
public void onStart() {
    super.onStart();

    // If BT is not on, request that it be enabled.
    if (!mBluetoothAdapter.isEnabled()) {
        Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
        // Otherwise, setup the session
    } else {
        setupSession();
    }
}

private void setupSession () {
    //Authenticate
    auth_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                out.write(AUTHENTICATE);
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            authenticate();
        }
    });

    //Create new account
    newAcc_btn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            try{
                out.write(NEWACCOUNT);
                out.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            newAccount();
        }
    });

    //Scan QR Code
    Button scan = (Button) findViewById(R.id.btn_scan);
    scan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(intent, SCAN_QR_CODE);
        }
    });

    auth_btn.setVisibility(View.INVISIBLE);
    newAcc_btn.setVisibility(View.INVISIBLE);
    mEdit.setVisibility(View.INVISIBLE);

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == SCAN_QR_CODE) {
        if (resultCode == RESULT_OK) {
            //Successful scan
            processQR(intent.getStringExtra("SCAN_RESULT"));
            //String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); //format of the code

            //Toast.makeText(this, contents, Toast.LENGTH_LONG).show();
        } else if (resultCode == RESULT_CANCELED) {
            Toast.makeText(this, "Scan failed!", Toast.LENGTH_SHORT).show();
        }
    }
    if (requestCode == REQUEST_ENABLE_BT) {
        // When the request to enable Bluetooth returns
        if (resultCode == Activity.RESULT_OK) {
            // Bluetooth is now enabled, so set up a chat session
            setupSession();
        } else {
            // User did not enable Bluetooth or an error occurred
            Log.d(TAG, "BT not enabled");
            Toast.makeText(this, "Bluetooth cannot be enabled", Toast.LENGTH_SHORT).show();
            finish();
        }
    }

}

public void processQR (String content) {
    String[] contents = content.split(" ");
    if (contents.length != 3) {
        Log.e(TAG, "Not well formed QR Code");
    }
    else {
        appKey = contents[APPKEY];
        macAdd = contents[MACADR];
        my_uuid = UUID.fromString(contents[UUID_STR]);
        Log.d(TAG, macAdd);
        String appName = db.getAppName(appKey);
        Log.d(TAG, appName);
        if (appName == null)
            return;
        Toast.makeText(this, appName, Toast.LENGTH_SHORT).show();
        BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAdd);
        try {
            bt = device.createInsecureRfcommSocketToServiceRecord(my_uuid);
            bt.connect();
            in = bt.getInputStream();
            out = bt.getOutputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Log.d(TAG, "Set new acc visible");
        mEdit = (EditText)findViewById(R.id.text_username);
        mEdit.setVisibility(View.VISIBLE);
        newAcc_btn.setVisibility(View.VISIBLE);

        if (db.appAccounts(appKey).getCount() > 0)
            auth_btn.setVisibility(View.VISIBLE);
    }
}

onStart() is called each time the activity is visible. 每当活动可见时,就会调用onStart() After pressing the scan button, the intent is executed, then the buttons are set to VISIBLE at onActivityResult() . 按下scan按钮后,将执行意图,然后在onActivityResult()处将按钮设置为VISIBLE

After which, the activity is visible again, causing onStart() to be executed, therefore making the buttons INVISIBLE again. 在这之后,活性再次可见,引起onStart()被执行,因此使按钮INVISIBLE一次。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM