我的问题几乎与此Stop AsyncTask in Fragments when Back Button is pressed
相同但是我想在单击后退箭头时停止我的AsyncTask。我有一个停止asynctask的代码,当我以另一种方式实现它时,它有效。到目前为止,我尝试了我研究的内容但仍然有错误。请帮帮我。
我试过这段代码
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id=item.getItemId();
if(id==android.R.id.home)
{
Intent returnIntent = new Intent();
returnIntent.putExtra("flag",userid);
setResult(Activity.RESULT_OK,returnIntent);
finish();
return true;
}}
更新: 我正在使用此代码转到另一个片段。
Fragment2 fragmentChild = new Fragment2 ();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.content, fragmentChild);
transaction.addToBackStack(null);
transaction.commit();
当我转到另一个片段时,我的回溯没有问题。然后我在我的(Drawer.java)中使用此代码(getSupportActionBar()。setDisplayHomeAsUpEnabled(true))来显示后退箭头。现在我想在点击箭头时添加事件。
编辑:(Drawer.java)
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
final ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
final View.OnClickListener originalToolbarListener = toggle.getToolbarNavigationClickListener();
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
toggle.setDrawerIndicatorEnabled(false);
toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getSupportFragmentManager().popBackStack();
}
});
} else {
toggle.setDrawerIndicatorEnabled(true);
toggle.setToolbarNavigationClickListener(originalToolbarListener);
}
}
});
答案 0 :(得分:0)
如果您正确设置了操作栏,那么您应该能够通过以下方式实现该操作:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// Add the code to stop the task
break;
}
return super.onOptionsItemSelected(item);
}
编辑:在能够处理后退按钮事件之后,您可以添加代码以关闭片段中的任务。首先,我创建了一个接口,该接口由应该能够关闭此任务的所有片段实现。
public interface TaskCancelFragment {
void cancelTask();
}
片段中的实现应该如下所示:
@Override
public void cancelTask() {
//Add the code to cancel the task
Toast.makeText(getContext(), "The task is canceled", Toast.LENGTH_SHORT).show();
}
最后一步是将事件从活动发送到片段。在这里,我将假设一些事情,因为我无法访问您的代码以查看您如何添加/查找片段,但幸运的是,这并不重要,并且很容易更改。除了初始答案之外,我还在活动中创建了一个新方法来查找当前片段并关闭任务。
private void cancelTasks() {
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.placeholder);
if (fragment instanceof TaskCancelFragment) {
((TaskCancelFragment) fragment).cancelTask();
}
}
最后,case android.R.id.home
看起来像这样:
case android.R.id.home:
cancelTasks();
onBackPressed(); // I think that you want to close the activity too
break;