Android中按Back键会自动调用LoaderManager吗?

时间:2014-01-29 07:40:02

标签: java android loader android-loadermanager

我是Android的新手。这里是LoaderManager类我在Button上编写代码点击初始化Loader。当我按下设备的按钮时,我来到了之前的活动,我再次调用了对Initialize loader的调用,它自动启动了新的活动而没有按任何键,即使我的初始化加载器是按钮点击。

为什么会这样?

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”不为空,因此它向nextActivity移动,但是当我按下设备的键时,它会转到上一个活动,它会自动移动到我们所在的同一个活动按下键。发生这种情况是因为我的扩展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?

1 个答案:

答案 0 :(得分:1)

收到数据后尝试销毁加载程序:

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);
    }
}