2
我使用setVisibility()
來隱藏onStart()
的一些UI組件,其目的是在某些情況下使它們在onActivityResult()
處重新出現。Android setVisibility(View.VISIBLE)不顯示組件
我已經將變量設置爲全局變量,並將其分配給組件onCreate()
。
代碼,以使組件無形正常工作,如auth_btn.setVisibility(View.INVISIBLE);
然而,在onActivityResult()
,auth_btn.setVisibility(View.VISIBLE);
不會使按鈕出現。 (在評論來自引擎收錄)
代碼:
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);
}
}
也許無效()父視圖? – 2011-12-30 23:20:33
您是否嘗試過調試您接收這些回調的順序?我的意思是,它可能是這樣的情況,你先收到onActivityResult(..),然後將onStart()調用一次後,將你的按鈕放回View.INVISIBLE。 – harism 2011-12-30 23:31:50
@harism yes onActivityResult肯定會晚一些。我已經把一些相關的代碼在這裏pastebin.com/vdheBK5L – segfault 2011-12-30 23:35:20