从片段关闭应用程序会导致返回父活动

时间:2014-01-02 19:15:26

标签: android fragment

我尝试了几种方法从片段内部结束应用程序,例如:

system.exit(1)
android.os.Process.killProcess(android.os.Process.myPid());
getActivity().finish();

并且它是所有片段代码;退出代码放在exitDialog.setPositiveButton oncliklistener上,在我的尝试cuse支持父活动而不是退出

package com.TB.mylistprojct;

import android.os.Bundle;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class ActFooter extends Fragment
{
    View            EMyView         =null;

    Button          BtnExit         =null;
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater Inflater,ViewGroup Container,Bundle SavedInstanceState)
{
    View MyView=Inflater.inflate(R.layout.actfooter, Container,false);
    EMyView=MyView;
    InitialUI();
    return MyView;
}

public void InitialUI()
{
    BtnExit=(Button)EMyView.findViewById(R.id.Btn_exit);
    BtnExit.setOnClickListener(BtnExit_OnClick);
}

public OnClickListener BtnExit_OnClick=new OnClickListener()
{

    @Override
    public void onClick(View arg0)
    {
        AlertDialog.Builder exitDialog=new AlertDialog.Builder(getActivity());

        exitDialog.setTitle("Warning");
        exitDialog.setMessage("Exit Program");
        exitDialog.setPositiveButton("YSE", new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface arg0, int arg1)
            {
                // Exit Code PUT Here
            }
        });
        exitDialog.setNegativeButton("NO", null);
        exitDialog.show();
    }
};
}

但应用程序返回父活动

9 个答案:

答案 0 :(得分:4)

最后我找到了解决方案

首先我在片段

中添加fllowing代码
Intent intent = new Intent(getActivity(), ACTMain.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("LOGOUT", true);
                startActivity(intent);

                getActivity().finish();

并在主要活动中(在onCreate函数中)我用if语句检查状态并退出:)

        if (getIntent().getBooleanExtra("LOGOUT", false))
    {
        finish();
    }

答案 1 :(得分:3)

试试这个:

getActivity().moveTaskToBack(true); 
getActivity().finish();

答案 2 :(得分:1)

最近我的应用程序遇到了同样的问题。 我在主要活动中使用了两个退出按钮 片段中的另一个

主要活动: - 首先,我使用onClick属性在main activity.xml文件中创建一个按钮,然后在我使用的java中:

在MainActivity.java中:

片段: - 我使用 setOnClickListener : 在HomeFragment.java里面:

以下是适用于片段的代码 在 MainActivity.java

public void clickExit(View v){
finish();
}

Fragment.java

button_2=(Button) view.findViewById(R.id.home_exit_btn);
    button_2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getActivity(), "Closing application...",   Toast.LENGTH_SHORT).show();
                getActivity().finish();
            }
        });
        return view;
    }

答案 3 :(得分:0)

这项工作非常适合我(所有进入具有片段容器的Activity):

private void backStack(){
    if(getSupportFragmentManager().getBackStackEntryCount()>1){
        getSupportFragmentManager().popBackStack();
    }else
    if(getSupportFragmentManager().getBackStackEntryCount()==1){
        this.finish();
    }
}

您必须在此处使用此代码:

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    boolean back = false;
    if(keyCode == KeyEvent.KEYCODE_BACK){
        back = true;
        backStack();
    }
    return back;

}

答案 4 :(得分:0)

只有在后台堆栈中没有活动时,应用才会退出。因此,在清单文件中将android:noHistory="true"添加到所有活动(您不希望回堆叠)。然后,要关闭应用,请调用finish()方法中的OnBackPressed()

<activity 
    android:name=".activities.MainActivity" 
    android:noHistory="true" />

答案 5 :(得分:0)

除了:

getActivity().finish()

这也对我有用:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

答案 6 :(得分:0)

我今天遇到了同样的问题,我尝试了这段代码,它对我来说很好用,我希望能为大家写信。

put this code in fragment
Intent intent = new Intent(fragment_name.this, MainActivity_name.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            intent.putExtra("LOGOUT", true);
            startActivity(intent);
            fragment_name.this.finish();

并将此代码放入onCreate函数中

    if (getIntent().getBooleanExtra("LOGOUT", false))
        {
            finish();
            System.exit(0);
        }

感谢@HamidTB:)

答案 7 :(得分:0)

您只需要在片段中保存父活动的实例即可调用其功能,例如在这种情况下,功能就是关闭应用程序,因此仅在您的片段类型中

activity_main.xml

然后只需使用它的功能,例如finish():

syntax is -> referencesObj = activity cast as "parentClass"

kotlin -> val parentActivity = activity as MainActivity
Java   -> MainAcitivity parentAcitivity = (MainActivity) getActivity();

答案 8 :(得分:-1)

你可以用.....

if(keyCode == KeyEvent.KEYCODE_BACK)
{
   getActivity().moveTaskToBack(true);
}