单击后退箭头(getSupportActionBar()。setDisplayHomeAsUpEnabled(true))时添加事件

时间:2017-05-16 10:30:08

标签: java android android-studio

我的问题几乎与此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);
            }
        }
    });

1 个答案:

答案 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;