在Android 4.2中,支持库获得了对嵌套片段的支持,请参见此处.我玩过它并发现了一个有关back stack和getChildFragmentManager()的有趣行为/ bug .当使用getChildFragmentManager()和addToBackStack(String name)时,通过按下后退按钮,系统不会将后栈运行到前一个片段.另一方面,当使用getFragmentManager()和addToBackStack(String name)时,按下后退按钮,系统将返回上一个片段.
对我来说,这种行为是出乎意料的.通过按下设备上的后退按钮,即使片段被添加到子节点片段管理器中的后栈,我也希望弹出最后添加到后栈的片段.
这种行为是否正确?这种行为是个错误吗?这个问题有解决方法吗?
public class FragmentceptionActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
final FrameLayout wrapper1 = new FrameLayout(this);
wrapper1.setLayoutParams(new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT));
wrapper1.setId(1);
final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
params.topMargin = 0;
final TextView text = new TextView(this);
text.setLayoutParams(params);
text.setText("fragment 1");
wrapper1.addView(text);
setContentView(wrapper1);
getSupportFragmentManager().beginTransaction().addToBackStack(null)
.add(1, new Fragment1()).commit();
}
public class Fragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, …Run Code Online (Sandbox Code Playgroud) 从我的应用程序,我想启动谷歌地图应用程序与提供的位置和标记.标记应指示该给定位置上有某些内容.
现在,我有以下代码,它以一个Intent开始,谷歌地图应用程序提供的位置(51.49234,7.43045).
startActivity(
new Intent(
android.content.Intent.ACTION_VIEW,
Uri.parse("geo:51.49234,7.43045")));
Run Code Online (Sandbox Code Playgroud)
Google地图应用启动时,如下所示:

没有显示标记.我想,谷歌地图应用程序会在该位置显示一个标记,通过意图给出.是否有任何"隐藏的"Intent URI可用于在Google Maps App中显示标记?
提前致谢.
@Rajiv M.向我指出了用给定位置查询周围环境的想法.
因此,解决方案是:使用给定位置作为参数查询给定位置的周围环境.URI看起来像:
geo:51.49234,7.43045?q=51.49234,7.43045
Run Code Online (Sandbox Code Playgroud)
Google地图会将查询结果显示为街道名称:

有点黑客,但似乎运作良好.
为什么不应该使用0,0作为地图位置
geo:0,0?q=51.49234,7.43045
Run Code Online (Sandbox Code Playgroud)
当您使用提供的地图位置点0,0启动Google地图应用时,Google地图应用将开始搜索您当前的设备位置.这需要时间.在某些情况下,当没有提供GPS信号时,太多了.在此之前,Google Maps应用程序将开始搜索您的查询51.49234,7.43045.