我是 Android 新手。这是 LoaderManager 类,我在单击按钮时编写了代码来初始化 Loader。当我按下设备的后退按钮时,我来到上一个 Activity ,并且再次调用对初始化加载程序的调用,并且它会自动启动新 Activity ,而无需按任何键,即使我的初始化加载程序是在按钮单击时也是如此。
为什么会这样?
LoginActivityService.java
public class LoginActivityService extends Activity implements
LoaderCallbacks<User>
{Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_view_service);
context = this;
userName = (EditText) findViewById(R.id.userName1);
password = (EditText) findViewById(R.id.password1);
loginBtn = (ImageButton) findViewById(R.id.login1);
logoutBtn = (Button) findViewById(R.id.logout1);
loginBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
doLogin(userName.getText().toString(),password.getText().toString());
}
});
}
public void doLogin(String userNameString, String passwordString) {
Log.i("do login button if", "login button clicked" + "username:"
+ userNameString + "passwor:" + passwordString);
if (userNameString.length() == 0 || passwordString.length() == 0) {
Toast.makeText(context, "UserName Or Password Should be Filled",
Toast.LENGTH_SHORT).show();
}
else
{ try {
getLoaderManager().restartLoader(1, null,LoginActivityService.this);
}
catch (Exception e) {
Log.i("do Login Stack Trace if Response false","do Login Stack Trace Catch Block");
e.printStackTrace();
}}
@Override
public Loader<User> onCreateLoader(int id, Bundle args) {
Log.i("in loader", "login button clicked" + "username:"+ userName.getText().toString() + "passwor:"
+ password.getText().toString());
loginLoader = new LoginLoader(context, userName.getText().toString(),
password.getText().toString(), "2013-07-10 01:18:26");
Log.i("login loader", "" + loginLoader);
return loginLoader;
}
@Override
public void onLoadFinished(Loader<User> arg0, User userInstance) {
Log.i("status", "" + userInstance);
if (userInstance == null) {
Toast.makeText(getApplicationContext(),"User Id and Password is wrong", Toast.LENGTH_SHORT).show();
}
else {
Intent intent = new Intent(LoginActivityService.this,
ProposalListActivity.class);
startActivity(intent);
}
}
@Override
public void onLoaderReset(Loader<User> arg0) {
// TODO Auto-generated method stub
// getLoaderManager().restartLoader(10000,null,LoginActivityService.this);
}
}
我的问题是我正在从服务获取数据,并且“userInstance”不为空,因此它移向下一个 Activity ,但是当我按设备的后退键时,它会移至上一个 Activity ,并自动移至我们所在的同一 Activity 按下返回键。发生这种情况是因为我的扩展 AsyncTaskLoader 的类具有 onloadinBackground() 并且再次调用此方法,有人可以指出我为什么会发生这种情况:
public class LoginLoader extends AsyncTaskLoader<User>
{
@Override
public User loadInBackground() {
// TODO Auto-generated method stub
User listUser = LoginListService.getLoginInstance().getLoginResult(userName,password,apkVersion);
Log.d(TAG, "load in background");
return listUser;
}
}
有人可以指导我需要添加哪些代码以避免自动调用 loadinBackground 吗?
最佳答案
收到数据后尝试销毁加载程序:
public void onLoadFinished(Loader<User> arg0, User userInstance) {
Log.i("status", "" + userInstance);
if (userInstance == null) {
Toast.makeText(getApplicationContext(),"User Id and Password is wrong", Toast.LENGTH_SHORT).show();
} else {
getLoaderManager().destroyLoader(arg0.getId());
Intent intent = new Intent(LoginActivityService.this,
ProposalListActivity.class);
startActivity(intent);
}
}
关于java - Android 中按下 Back 键时会自动调用 LoaderManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21424908/