Articles of android activity

设置整个应用程序的屏幕方向

我正在实现一种方法,用户可以从应用程序设置中禁用屏幕旋转。 如果选中该框,则可以自动旋转任何Activity并按照电话旋转设置进行操作。 如果未选中,则禁用自动旋转。 我知道如何按照这样的Activity来做 if(!GlobalVar.sharedPreferences_static.isAutoRotate()){ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }else{ setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); } 有没有办法可以为所有活动(整个应用程序)执行此操作,而不是为每个Activity执行此操作? 谢谢。

使用Intent.FLAG_ACTIVITY_MULTIPLE_TASK是否安全?

背景 让我们来看下一个场景: 用户使用具有多个活动的应用X(如gmail应用)。 在浏览应用程序X之后,他会去你的应用程序。 在您的应用中,您需要使用意图启动此X应用,以转到其中的特定活动。 现在,用户转到应用X上的此特定活动。 用户按下后退按钮,希望返回到您的应用程序而不是停留在应用程序X上。 另一个类似的场景 用户在活动之间浏览您的应用。 你的应用程序转到后台(例如,使用主页按钮)。 您的应用会显示一个通知,一旦点击,它就会打开您应用的特定活动。 用户点击通知并转到您应用的特定活动。 用户按下后退按钮,希望返回到单击通知之前显示的应用程序,而不是转到上次离开时​​显示的应用程序上的上一个活动。 似乎两种方案的最后一步都不是默认行为。 这就是为什么我为此寻找了最好的旗帜组合。 问题 似乎可以实现我所描述的行为的唯一标志是Intent.FLAG_ACTIVITY_MULTIPLE_TASK (与Intent.FLAG_ACTIVITY_NEW_TASK一起)。 但是,根据android API,不建议将此标志用于正常使用: 除非您要实现自己的顶级应用程序启动器,否则请勿使用此标志。 … 由于默认系统不包含图形任务管理,因此除非您为用户提供某种方式返回已启动的任务,否则不应使用此标志。 这些信息似乎与关于意图的其他描述一样令人困惑。 我见过其他的Intent标志,比如Intent.FLAG_ACTIVITY_CLEAR_TASK ,它们可以实现类似的结果,但它们有奇怪的行为和/或它们使用高API 这个问题 使用这个标志是否安全? 它有什么好的替代品吗? 使用此标志的危险是什么?使用它的API的描述含义是什么?

为什么启动我的活动的Intent不包含我在发送给startActivity()的Intent中放入的额外数据?

我最初解释得很糟糕。 这是我的问题:我发送给startActivity()方法的Intent包含一个私有字段mMap,它是一个包含我发送给putExtra()的字符串的Map。 当目标活动开始时,对getIntent()的调用将返回不包含这些值的Intent。 mMap字段为空 。 显然,View层次结构的内容或启动新活动的OS部分创建了一个新的Intent传递给它,因为对象ID是不同的。 但为什么? 为什么putData()值没有携带fowrard到新的Intent? 启动新活动的活动会扩展活动。 这是启动代码: public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case 4: i = new Intent(this, StatList.class); i.putExtra(“Name1”, “Test1”); i.putExtra(“Name3”, “Test2”); startActivity(i); } } 我已尝试使用和不使用(推荐)完整包名称前缀的键值。 在Eclipse调试器中,我已经validation了正确插入到i.mExtras.mMap中的播放器名称的值。 这是来自初学者的代码: public class StatList extends ListActivity { private final StatsListAdapter statsAdapter; public StatList() { statsAdapter = StatsListAdapter.getInstance(this); } // default […]

如何共享元素从片段到活动的转换

我在一个活动中的ViewPager中有三个片段,我想实现从一个片段到另一个片段的共享元素转换。 转换来自回收者视图,该视图位于视图中的片段内部,该视图提取器位于活动活动 – > ViewPager-> Fragment-> Recyclerview内 我搜索了每个地方的互联网,但是只有关于从一个片段到另一个片段的共享元素转换以及一个活动到另一个片段的信息。 没有关于从片段到活动的转换的内容 holder.poster.setTransitionName(“posterX”); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) con,holder.poster,holder.poster.getTransitionName()); Log.e(“Animation”, “Success”); //startActivity((Activity) con,intent,options.toBundle()); c.startActivity(intent,options.toBundle()); 在使用上面的代码时,第二个活动启动但没有任何内容可见,例如第二个活动包含一个FAB,当点击youtube时会启动它。 当我盲目点击时,我知道FAB在哪里,youtube正确启动但在第二个活动中没有任何内容可见 D/ViewRootImpl: changeCanvasOpacity: opaque=true 它的其中一个logcats。 我认为这一定是问题!!

Volley适用于WIFI但不适用于3G

如果问题太长,我会提前道歉。 开始了: 有两个活动: Main和Detail Activity。 Main Activity基本上是一个GridView。 Detail Activity基本上显示了被点击项目的详细信息。 我将所选项目的ID( pid )从Main传递给Detail Activity。 我面临的问题如下。 最初,我有3G连接(蜂窝连接)并点击第一项并在Detail Activity看到相应的项目详细Detail Activity ,它工作得很好,然后返回Main Activity ,然后点击第二项,然后不幸的是仍然显示我最初点击的DetailActivity中的第一个项目。 当应用程序处于活动状态并打开时,我从3g切换到wifi 。 无论我点击什么,它仍然显示我最初点击的第一个项目。 但是,当我删除应用程序并重新安装它并获得只有 wifi访问时,该应用程序工作得很好。 在以下实现中,连接URL(PRODUCT_DETAIL_URL)是http ,而不是https 。 我正在使用Volley库进行网络连接。 DetailActivity.java private void productDetailInit() { // it is http StringRequest postRequest = new StringRequest(Request.Method.POST, Config.PRODUCT_DETAIL_URL, new Response.Listener() { @Override public void onResponse(String response) { try { […]

调用设置时,onActivityResult始终返回0(RESULT_CANCELED)

我可能会以错误的方式解决问题。 我正在做的是在没有互联网连接时显示警告信息,并且“确定”按钮引导用户进入wifi设置以打开互联网。 我希望应用程序执行的操作,当用户在更改(或不更改)Internet设置后返回该应用程序时,将重新加载应用程序或活动。 为此,我正在执行以下调用“ok”按钮: static void startAct(Activity ctxt) { ctxt.startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), WIFI_SETTINGS); } 在活动的类上,显示此消息我有以下内容: public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == WIFI_SETTINGS && resultCode == RESULT_OK) { this.finish(); Intent myIntent = new Intent(this, MyActivity.class); startActivity(myIntent); } } 但是resultCode始终为0,在按下“ok”按钮后立即调用onActivityResult。 我应该以不同的方式解决这个问 当用户从wifi设置回来时,如何重新加载/刷新我的应用程序? 我已经检查了类似的答案,但他们似乎在同一个应用程序中使用了一个活动,所以他们可以调用set_result(…) ,但我不能在这里做。 谢谢!

如何从Intent调用活动时恢复活动

我有以下情况:单击一个按钮时,一个活动(DateActivity)调用另一个活动(ListActivity)。 那很有效。 但是,每次单击该按钮时,似乎都会创建一个新的ListActivity副本。 如何根据需要使其恢复最后一个ListActivity或创建新的ListActivity? 注意:我目前正在使用startActivity(intent);启动ListActivity startActivity(intent);

如何自动测试应用程序在其他活动方面的行为与预期相似?

我有一个应用程序,在呼叫结束后立即启动活动。 我想写一个自动测试,确保: 它实际上发射 如果在我的活动被激活后popup一些其他活动(例如还有另一个电话或短信),一旦用户完成这项新活动,我的活动将再次显示(除非用户点击“主页”按钮或其他内容。 我看了一下Robotium和Roboelectric框架,但是如果它完全可行的话就无法find答案。

为什么在onSaveInstanceState()中保存非Parcelable对象的Hashtable有时会起作用?

在阅读了介绍性的Android编程书之后,我想改变示例应用程序,以巩固我对一些未真正涵盖的主题的理解。 在进行更改时,我犯了一个错误,但我很好奇为什么错误在某些情况下有效而在其他情况下无效。 应用程序中的活动将一系列问题存储在Hashtable ,其中Question是一个包含int和两个字符串的小类。 最初编写时,活动会在每个onCreate()上从服务器下载问题,因此我想实现onSaveInstanceState()以防止一些冗余下载。 onSaveInstanceState()使用putSerializable()将Hashtable保存到Bundle中。 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); // mQuestions is a member variable of // type Hashtable if (mQuestions != null && mQuestions.size() > 0) { outState.putSerializable(SAVED_QUESTIONS, mQuestions); } } 即使在我知道Parcelable是什么或如何实现之前,它也能完美地适应屏幕方向的变化。 我只知道当我按下模拟器的主页键和应用程序静默时出现问题,无法在没有LogCat输出的情况下崩溃。 堆栈跟踪让我查找Parcelable并使Question实现它。 我的问题不是我做错了。 问题是: 当Question类没有实现Parcelable时,为什么应用程序只在按Home而不是屏幕方向更改时崩溃?

在前景方面杀死活动

我写了一个应用程序n一个问题。我有三个活动A,B和C.当我从活动A到B和B到C,如果我按下设备上的菜单按钮。我的应用程序进入后台状态。 当我重新打开应用程序时,它显示活动C.我想当我重新打开我的应用程序时它应该显示活动A而不是活动堆栈中的任何其他活动。 我已经完成了一些活动生命周期方法并试图覆盖它。我有覆盖onStart(),onPause()方法和finsh活动C以及活动B和我面临的问题是当我从活动C转到活动D活动时C完成所有后台活动nm无法在活动D结束时回到活动C.任何人都可以帮助我如何在应用程序的恢复上显示特定的活动? 提前解决。 这是我的manifest.xml