我有一组activities
,它们都扩展了一个baseActivity
。
我正在尝试设置title in the BaseActivity
以便它反映在所有子活动中。
应用正在登录用户。我试图在他们登录后在每个屏幕中都有username across the title
。
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class NfcBaseActivity extends Activity{
private static final String TAG = NfcBaseActivity.class.getSimpleName();
String carername;
public String getCarername() {
return carername;
}
public void setCarername(String carername) {
this.carername = carername;
Log.e(TAG, "setting carername to " + this.carername);
setTitle(carername + " is currently logged in");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setTitle(getCarername() + " is logged in");
}
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.entryscreen);
nfcscannerapplication = (NfcScannerApplication) getApplication();
//loginWebservice = new LoginWebservice(this);
loginWebservice = nfcscannerapplication.loginWebservice;
userName = (EditText)findViewById(R.id.username);
passwordPin = (EditText)findViewById(R.id.password);
login = (Button)findViewById(R.id.buttonlogin);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
////////////get user's input///////////
compId = "100";
String theUsername = userName.getText().toString();
thePassword = passwordPin.getText().toString();
String loginType = "1";
String[] params = new String[]{compId, theUsername, thePassword, loginType};
//validate user Asynchonously on background thread
AsyncValidateCarer avc = new AsyncValidateCarer();
avc.execute(params);
EntryActivity.this.setCarername(fullName);
}// end of onclick
});
我调用 AsyncTask
它根据 Web 服务验证用户,然后将实例变量 fullName 设置为用户名。
此异步任务是从活动的onClick()
调用的。我使用以下命令调用活动的超类方法 setcarer()
,该方法在超类中设置标题。
我希望这种变化能反映在扩展超类的所有其他类中。
为什么没有反映出来?
EntryActivity.this.setCarername(fullName);
可能是因为您的fullName
变量在调用EntryActivity.this.setCarername(fullName);
时仍然为空。
我假设您在 AsyncTask 中的某个位置设置了此变量,因此您必须在 AsyncTask 的 onPostExecute
方法中调用EntryActivity.this.setCarername(fullName);
,因为avc.execute(params);
继续而无需等待 AsyncTask 完成。