Android 无法正确获取返回到上一个片段的片段
回答:我在片段a中有一个搜索视图,它在片段B后面仍然有焦点,所以第一次反压清除了那个焦点,让第二次反压完成我认为应该做的事情。谢谢你的帮助,很抱歉,我最初发布的信息不足以帮助我找到问题的解决方案Android 无法正确获取返回到上一个片段的片段,android,Android,回答:我在片段a中有一个搜索视图,它在片段B后面仍然有焦点,所以第一次反压清除了那个焦点,让第二次反压完成我认为应该做的事情。谢谢你的帮助,很抱歉,我最初发布的信息不足以帮助我找到问题的解决方案 you can do something like this in your code //Click of the Item mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Overr
you can do something like this in your code
//Click of the Item
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
final Obj item = (obj) adapter.getItemAtPosition(position);
Bundle b = new Bundle();
b.putParcelable("obj", item);
Fragment fragment = new ObjFragment();
fragment.setArguments(b);
getFragmentManager().beginTransaction().add(android.R.id.content, fragment).addToBackStack("ObjFragment").commit();
}
});
//Backpress code
FragmentManager fragmentManager = getFragmentManager();
try {
fragmentManager.popBackStack();
} catch (Exception e) {
e.printStackTrace();
}
问题
我遇到了一个问题,当我添加并提交一个新片段时,需要按两次后退按钮才能返回到上一个视图
注意:这只发生在您选择的第一个项目上,一旦您成功返回到包含listview的片段并再次选择对象或新对象,则只需按一次“上一步”按钮
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
final Obj item = (obj) adapter.getItemAtPosition(position);
Bundle b = new Bundle();
b.putParcelable("obj", item);
Fragment fragment = new ObjFragment();
fragment.setArguments(b);
getFragmentManager().beginTransaction().add(android.R.id.content, fragment).addToBackStack(null).commit();
}
});
回答:我在片段a中有一个搜索视图,它在片段B后面仍然有焦点,所以第一次反压清除了那个焦点,让第二次反压完成我认为应该做的事情。感谢您的帮助,很抱歉,我最初发布的信息不足以帮助我找到问题的解决方案。您可以在代码中执行类似操作
you can do something like this in your code
//Click of the Item
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
final Obj item = (obj) adapter.getItemAtPosition(position);
Bundle b = new Bundle();
b.putParcelable("obj", item);
Fragment fragment = new ObjFragment();
fragment.setArguments(b);
getFragmentManager().beginTransaction().add(android.R.id.content, fragment).addToBackStack("ObjFragment").commit();
}
});
//Backpress code
FragmentManager fragmentManager = getFragmentManager();
try {
fragmentManager.popBackStack();
} catch (Exception e) {
e.printStackTrace();
}
//单击项目的名称
mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共单击(适配器视图适配器,视图v,内部位置,长arg3){
最终Obj项=(Obj)适配器.getItemAtPosition(位置);
Bundle b=新Bundle();
b、 可随身携带(“obj”,项目);
Fragment Fragment=新的ObjFragment();
fragment.setArguments(b);
getFragmentManager();
}
});
//反压码
FragmentManager FragmentManager=getFragmentManager();
试一试{
fragmentManager.popBackStack();
}捕获(例外e){
e、 printStackTrace();
}
回答:我在片段a中有一个searchview,它在片段B后面仍然有焦点,所以第一次按下按钮清除了焦点,让第二次按下按钮完成我认为应该做的事情。感谢您的帮助,很抱歉,我最初发布的信息不足以帮助我找到问题的解决方案。发布返回单击的代码。我已将您建议的内容添加到拥有该片段的活动中的onBackPressed()中。功能没有改变,第一个backpress调用没有触发异常。正确,上面的侦听器位于片段(片段a)内部,当选择一个对象时,将使用对象信息(片段B)生成一个新片段。在片段B中点击backpress之后,我想返回到片段A。这确实有效,我只是想弄清楚为什么它最初需要两个backpress。在活动中,你在哪里调用backpress代码?我在我的MainActivity中调用它,其中片段A是最初设置的。据我所知,我无法在片段中重写onBackPress(),因此我需要从活动中重写?还是我想错了?是的,你必须在你的活动中覆盖onBackPressed。我用sam的方法,这对我很有用。可能是您正在代码中执行其他操作。你可以调试它,检查它
you can do something like this in your code
//Click of the Item
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View v, int position, long arg3) {
final Obj item = (obj) adapter.getItemAtPosition(position);
Bundle b = new Bundle();
b.putParcelable("obj", item);
Fragment fragment = new ObjFragment();
fragment.setArguments(b);
getFragmentManager().beginTransaction().add(android.R.id.content, fragment).addToBackStack("ObjFragment").commit();
}
});
//Backpress code
FragmentManager fragmentManager = getFragmentManager();
try {
fragmentManager.popBackStack();
} catch (Exception e) {
e.printStackTrace();
}