我正在使用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);
}
}
答案 0 :(得分:6)
onStart()
。按下scan
按钮后,会执行意图,然后在VISIBLE
将按钮设置为onActivityResult()
。
之后,活动再次可见,导致onStart()
被执行,从而再次生成按钮INVISIBLE
。