我尝试了几种方法从片段内部结束应用程序,例如:
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();
}
};
}
但应用程序返回父活动
答案 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);
}