有没有一种方法可以onBackPressed()在Android Fragment中实现类似于我们在Android Activity中实现的方式?
正如Fragment生命周期所没有的那样onBackPressed().有没有其他替代方法来覆盖onBackPressed()Android 3.0碎片?
我现在有一个包含片段的活动
[1],[2],[3],[4]
如果按下按钮[3],可以将其重定向到[4]
我想实现后退按钮如下图所示..
当按下[4]时,返回[3]
当按下[3]时,返回[2]
当按下[1]时,活动结束();
当涉及到当前的实现时,它完成活动而不是弹出Fragment.你能告诉我我应该做什么或记住什么?
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if( keyCode==KeyEvent.KEYCODE_BACK)
{
finish();
}
return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud) 我有一个片段:
public class MyFragment extends Fragment{
...
@Override
public View onCreateView(...){...}
...
}
Run Code Online (Sandbox Code Playgroud)
我实例化它:
MyFragment myFragment = new MyFragment();
Run Code Online (Sandbox Code Playgroud)
我使用上面的片段来替换当前片段:
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
// replace fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFragment, "myTag");
// NOTE: I did not add to back stack
Run Code Online (Sandbox Code Playgroud)
现在,myFragment正在屏幕上显示.注意:我没有添加myFragment到后台堆栈.
我的两个问题:
1.如果现在,我按下手机后退按钮,将调用哪个片段的生命周期回调?
2.如何在课堂上自定义后退按钮单击侦听器MyFragment?(请不要建议我这样做myFragment.getView().setOnclickListener,但是在MyFragment课堂上这样做)
android android-emulator android-intent android-layout android-fragments
我想禁用片段类中的后退按钮.onBackPressed()似乎没有在这个片段中工作.我怎么能禁用后退按钮?
这是我的示例代码:
public class Login extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
,Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.login, null);
return root;
}
public void onBackPressed() {
}
}
Run Code Online (Sandbox Code Playgroud) 我制作片段更换器助手类,我有一些问题.
我叫它 FragmentChanger
它有一个fragmentContainer,它是一个ViewGroup,包含我想要显示的所有片段.
我做了我自己的 replace(Fragment fragmentToChange, boolean needSaveToBackStack)
功能是:
needSaveToBackStack为true或false.错误如下:
如果我使用我的替换功能保存到backStack它工作正常,我可以使用我的设备的后退按钮踩回到预先添加的片段它像魅力一样工作.
但是当我想用OUT保存到backStack 替换片段时,我的代码中有一些错误,因为当我退后时,我可以在屏幕上看到我没有添加到backStack的片段,而且我还可以看到其他同时添加了片段!
所以我可以在同一时间看到2个片段,如下所示:

这是我的代码:
//It is my helper class to handle replacing fragments.
public class FragmentChanger {
// fragmentTransaction
FragmentTransaction fragmentTransaction;
// the container for fragments
ViewGroup fragmentContainer;
// activity ofc
Activity act;
// Ctr: adding a default fragment to be the first so we can see it at app …Run Code Online (Sandbox Code Playgroud) 我有片段活动与contatin导航抽屉.点击导航抽屉项后,它打开片段1,片段2,片段3.然后在片段1中按钮点击事件后打开新的片段4.
我想要处理后退按键事件我怎样才能在片段4上执行此操作?在片段4中单击后退键后我想返回片段1.
我在我的应用程序中使用片段.在主页上,我有一个关于选择的5个项目的网格视图,我再次打开一个新片段.
所以正在发生的事情就是在关闭应用程序之后显示一个空白屏幕.
请告诉我我在这方面做错了什么.
mycode的
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View v, int arg2,
long arg3) {
if (DASHBOARD_LINKS[arg2].equals("A")) {
fragTran.replace(R.id.content_frame,
firstFrag);
fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragTran.addToBackStack(null);
fragTran.commit();
}
if (DASHBOARD_LINKS[arg2].equals("B")) {
fragTran.replace(R.id.content_frame, secondFrag);
fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragTran.addToBackStack(null);
fragTran.commit();
}
if (DASHBOARD_LINKS[arg2].equals("C")) {
fragTran.replace(R.id.content_frame, thirdFarg);
fragTran.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
fragTran.addToBackStack(null);
fragTran.commit();
}
}
});
Run Code Online (Sandbox Code Playgroud)
请帮助我发生这种情况
我创建示例应用程序,以便在用户启动特定活动时向用户显示一些数据,然后单击特定按钮,应用程序启动新片段(现在只将片段添加到活动中)我的问题是当用户单击片段并删除活动并转到父母的活动.使用此代码来做到这一点
android.support.v4.app.FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();
fragmentManager.popBackStack();
Run Code Online (Sandbox Code Playgroud)
当用户单击特定按钮片段并正确返回时,我也会在另一个操作中使用相同的代码.
任何人都可以帮我解决这个问题
我只有1个活动,其中有2个片段。当开始活动时,片段A将启动。在用户键入某些内容并单击后,按钮将定向到片段B。因此,我想做的是通过在左上角添加类似<-的“后退箭头”。
它与FragmentManager.popBackStack()有关吗?请指教 !谢谢
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager manager=getSupportFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
first first=new first();
transaction.add(R.id.top,first);
transaction.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
第一.java
public class first extends Fragment implements View.OnClickListener{
Button get_button;
EditText get_input_name;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_first,container,false);
get_input_name=(EditText)rootView.findViewById(R.id.input_name);
get_button=(Button)rootView.findViewById(R.id.submit);
get_button.setOnClickListener(this);
return rootView;
}
public void onClick(View v){
FragmentManager manager=getFragmentManager();
FragmentTransaction transaction=manager.beginTransaction();
two Two=new two();
Bundle bundle = new Bundle(); …Run Code Online (Sandbox Code Playgroud) 我正在使用带有底部导航视图的简单应用程序。我有3个片段(布局和Java)。我有在我的MainActivity.java中声明的BottonNavigationView。我的bottonnavigation有3个项目,分别是3个片段。因此,在我的MainActivity.java中,当我选择一个项目时,它将开始一个片段。因此,当我再次选择另一个项目时,什么也没有发生,因为在Java片段中我需要声明BottonNavigationView,但是我不知道如何设置它以将实际片段与另一个片段切换。我尝试了此链接,但没有成功:https : //developer.android.com/training/basics/fragments/fragment-ui.html
对不起,我的英语不好
这里的代码:
主要活动
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
selectedFragment = HomeFragment.newInstance();
break;
case R.id.navigation_dashboard:
selectedFragment = DashboardFragment.newInstance();
break;
case R.id.navigation_notifications:
selectedFragment = NotificationsFragment.newInstance();
break;
}
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.content, selectedFragment);
transaction.commit();
return true;
}
Run Code Online (Sandbox Code Playgroud)
片段Java示例
public class HomeFragment extends Fragment {
public static HomeFragment newInstance() {
HomeFragment fragment = new HomeFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { …Run Code Online (Sandbox Code Playgroud)