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

时间:2011-12-30 23:15:40

标签: android

我正在使用setVisibility()隐藏onStart()处的某些UI组件,目的是让它们在onActivityResult()的某些条件下重新出现。

我已将变量设置为全局变量,并将其分配给onCreate()处的组件。

使组件不可见的代码正常工作,例如auth_btn.setVisibility(View.INVISIBLE);

但是,在onActivityResult()auth_btn.setVisibility(View.VISIBLE);不会重新显示该按钮。

代码(来自评论中的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);
    }
}

1 个答案:

答案 0 :(得分:6)

每次活动可见时都会调用

onStart()。按下scan按钮后,会执行意图,然后在VISIBLE将按钮设置为onActivityResult()

之后,活动再次可见,导致onStart()被执行,从而再次生成按钮INVISIBLE