Android 从片段关闭应用程序会导致返回父活动
我尝试了几种从片段内部结束应用程序的方法,如:Android 从片段关闭应用程序会导致返回父活动,android,fragment,Android,Fragment,我尝试了几种从片段内部结束应用程序的方法,如: system.exit(1) android.os.Process.killProcess(android.os.Process.myPid()); getActivity().finish(); 这都是片段代码;退出代码放在exitDialog.setPositiveButton oncliklistener上,在我的try中,它会返回到父活动,而不是退出 package com.TB.mylistprojct; import android
system.exit(1)
android.os.Process.killProcess(android.os.Process.myPid());
getActivity().finish();
这都是片段代码;退出代码放在exitDialog.setPositiveButton oncliklistener上,在我的try中,它会返回到父活动,而不是退出
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();
}
};
}
但应用程序将返回到父活动尝试以下操作:
getActivity().moveTaskToBack(true);
getActivity().finish();
最后我找到了解决办法 首先,我在片段中添加FLOWING代码
Intent intent = new Intent(getActivity(), ACTMain.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("LOGOUT", true);
startActivity(intent);
getActivity().finish();
在主活动(onCreate函数)中,我使用if语句检查状态并退出:)
这对我来说非常有效(所有人都参与了带有片段容器的活动): 您必须在此处使用此代码:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
boolean back = false;
if(keyCode == KeyEvent.KEYCODE_BACK){
back = true;
backStack();
}
return back;
}
只有在后台堆栈中没有活动时,应用程序才会退出。因此,将
android:noHistory=“true”
添加到清单文件中的所有活动(您不希望将其重新堆叠)。然后,要关闭应用程序,请调用OnBackPressed()
方法中的finish()
<activity
android:name=".activities.MainActivity"
android:noHistory="true" />
最近我的应用程序也出现了同样的问题。 我使用了两个退出按钮,一个在主活动中,另一个在片段中 主要活动:- 首先,我在main activity.xml文件中使用onClick属性创建一个按钮,然后在java中使用: MainActivity.java内部: 对于片段:- 我使用设置ClickListener: 在HomeFragment.java中: 下面是适用于我的片段代码 内部MainActivity.java
public void clickExit(View v){
finish();
}
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;
}
内部Fragment.java
public void clickExit(View v){
finish();
}
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;
}
你可以用
if(keyCode == KeyEvent.KEYCODE_BACK)
{
getActivity().moveTaskToBack(true);
}
除了:
getActivity().finish()
这也对我起了作用:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
我今天也遇到了同样的问题,我尝试了这个代码,它对我来说很好,我希望每个人都能理解
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:)你只需要在你的片段中保存父活动的实例来调用它的函数,就像在这个例子中,函数是关闭应用程序,所以只需要在你的片段类型中
syntax is -> referencesObj = activity cast as "parentClass"
kotlin -> val parentActivity = activity as MainActivity
Java -> MainAcitivity parentAcitivity = (MainActivity) getActivity();
然后使用类似finish()的函数:
我无法在fragment:|@HamidTB中访问此函数。您必须使用
requireActivity()
而不是getActivity()
。希望这对你有用。
parentActivity.finish()