我有一个片段 ;
MyFragment myFrag = new MyFragment();
Run Code Online (Sandbox Code Playgroud)
我把bundle数据放到这个片段:
Bundle bundle = new Bundle();
bundle.putString("TEST", "test");
myFrag.setArguments(bundle);
Run Code Online (Sandbox Code Playgroud)
然后,我用这个替换旧片段并放在backstack上:
//replace old fragment
fragmentTransaction.replace(R.id.fragment_placeholder, myFrag, "MyTag");
//put on backstack
fragmentTransaction.addToBackStack(null);
//commit & get transaction ID
int transId = fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
后来,我使用上面的事务ID()弹出backstacktransId:
//pop the transaction from backstack
fragmentManager.popBackStack(transId,FragmentManager.POP_BACK_STACK_INCLUSIVE);
Run Code Online (Sandbox Code Playgroud)
后来,我再次将bundle数据作为参数设置到我的fragment(myFrag):
//Got Java.lang.IllegalStateException: fragment already active
myFrag.setArguments(bundle);
Run Code Online (Sandbox Code Playgroud)
如您所见,我的上述代码异常Java.lang.IllegalStateException: fragment already active.虽然我已经从backstack弹出了它的事务,但我不明白为什么 myFrag 仍然有效.无论如何,因为我得到了例外,我认为我别无选择,只能取消激活片段,所以,我做了:
Fragment activeFragment = fragMgr.findFragmentByTag("MyTag");
fragmentTransaction.remove(activeFragment); …Run Code Online (Sandbox Code Playgroud) android android-emulator android-intent android-layout android-fragments
我正在尝试从Google+同步照片中的某个文件夹中获取图库应用中的图片.选择图像后,Uri正在正确传回.但是当我试图在存储设备上获取该图像的实际路径时,我可以使用它,它会崩溃.问题似乎与picasa内容提供商有关.
在Nexus S和Nexus 7以及其他设备上进行了测试.
E/AndroidRuntime(14572): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.google.android.gallery3d.provider/picasa/item/5427003652908228690 }}
这里,dat字段似乎正确地传递了Uri,但是当我尝试获取图像的位置时,它崩溃时出现以下错误.
W/GalleryProvider(14381): unsupported column: _data
似乎Picasa相册的内容提供商没有_data字段.
获取位置的代码是:
// imageUri is the Uri from above.
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = context.getContentResolver().query(imageUri, proj,null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String filePath = cursor.getString(column_index);
cursor.close();
此图片似乎唯一支持的列包括:[user_account,picasa_id,_display_name,_size,mime_type,datetaken,纬度,经度,方向]
我们如何获得此图像的实际位置.如果我们不应该使用此图像,则不应首先向用户显示这些图像.
启动图库应用程序的意图是:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
我的活动A与android:launchMode="singleTop"在清单.
如果我去的活动B,C和D在那里我有菜单快捷方式回到我的应用程序根系活力(A).
代码如下所示:
Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)
但是,不是返回到A我已经存在的实例,MainActivity.class而是创建一个新实例 - >它onCreate()转而不是onNewIntent().
这不是预期的行为,对吗?
在我的Android应用程序中,我想从最初的活动'A'开始一个活动'B'.我已经为这两个创建了类.但是,当使用以下代码启动B时,我收到运行时错误:application has stopped unexpectedly, try again.这是我的代码:
Intent myIntent = new Intent(this, AddNewActivity.class);
startActivity(myIntent);
Run Code Online (Sandbox Code Playgroud)
当我AndroidManifest.xml/manifest/application/activity/intent-filers为活动B 添加新条目时,应用程序工作.
我有两个问题:
AndroidManifest.xml,android如何知道首先启动哪个活动?这是我的偏爱 AndroidManifest.xml
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ListAllActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".AddNewActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud) 是否可以仅为一个活动覆盖onBackPressed()?
在后退按钮上单击我想调用特定活动的对话框,但在所有其他活动中,我希望它在之前工作(转到上一个活动)...
谢谢你的提前.
EDITED
谢谢你们所有的人,我已经拥有了你告诉我的所有内容,但我的问题是,当我点击另一个活动上的后退按钮时,我会去我之前的活动(那里我有后退按钮Overriden)和我认为它不起作用,我认为它在整个应用程序中覆盖onBackPressed(),现在我得到了它:D
从Android文档:
FLAG_ACTIVITY_CLEAR_TASK
如果在传递给Context.startActivity()的Intent中设置,则此标志将导致在活动开始之前清除与活动关联的任何现有任务.也就是说,活动成为否则为空任务的新根,并且任何旧活动都已完成.这只能与FLAG_ACTIVITY_NEW_TASK一起使用.
和
FLAG_ACTIVITY_TASK_ON_HOME
如果在传递给Context.startActivity()的Intent中设置,则此标志将使新启动的任务置于当前主活动任务(如果有)之上.也就是说,从任务中退回将始终将用户返回到主页,即使这不是他们看到的最后一个活动.这只能与FLAG_ACTIVITY_NEW_TASK一起使用.
考虑这两个片段:
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
和
Intent intent = new Intent(this, Activity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我理解的方式,在任何代码片段,我们创造它只有在活动是一项新的任务,而当你按下回你到主屏幕.假设我可能弄错了,两者之间有什么区别?另外,如果我有另一个片段,Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_TASK_ON_HOME | Intent.FLAG_ACTIVITY_CLEAR_TASK它会如何表现?
我的应用内结算代码工作正常,直到我升级到Android L Dev Preview.现在,当我的应用程序启动时出现此错误.有没有人知道L导致了什么变化或者我应该如何更改我的代码来解决这个问题?
android {
compileSdkVersion 'android-L'
buildToolsVersion '20'
defaultConfig {
minSdkVersion 13
targetSdkVersion 'L'
...
...
compile 'com.google.android.gms:play-services:5.+'
compile 'com.android.support:support-v13:21.+'
compile 'com.android.support:appcompat-v7:21.+'
...
...
Run Code Online (Sandbox Code Playgroud)
应用启动时的错误:
06-29 16:22:33.281 5719-5719/com.tbse.wnswfree D/AndroidRuntime? Shutting down VM
06-29 16:22:33.284 5719-5719/com.tbse.wnswfree E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.tbse.wnswfree, PID: 5719
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tbse.wnswfree/com.tbse.wnswfree.InfoPanel}: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.android.vending.billing.InAppBillingService.BIND }
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2255)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2317)
at android.app.ActivityThread.access$800(ActivityThread.java:143)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1258)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5070)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372) …Run Code Online (Sandbox Code Playgroud) android illegalargumentexception android-intent in-app-billing android-5.0-lollipop
查看intent.resolveActivity != null 但启动 Intent 会引发 ActivityNotFound 异常,我在打开浏览器或具有深度链接的应用程序时写道:
private fun openUrl(url: String) {
val intent = Intent().apply {
action = Intent.ACTION_VIEW
data = Uri.parse(url)
// setDataAndType(Uri.parse(url), "text/html")
// component = ComponentName("com.android.browser", "com.android.browser.BrowserActivity")
// flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_GRANT_READ_URI_PERMISSION
}
val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
if (activityInfo?.exported == true) {
startActivity(intent)
} else {
Toast.makeText(
this,
"No application can handle the link",
Toast.LENGTH_SHORT
).show()
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用。在 API 30 模拟器中找不到浏览器,而一个常见的解决方案有效:
private fun openUrl(url: String) {
val intent …Run Code Online (Sandbox Code Playgroud) android android-manifest android-intent activitynotfoundexception android-11
我想利用内置的意图选择器来显示自定义过滤的应用列表,供用户选择和启动.
我知道如何获取已安装的软件包列表:
final Intent myIntent = new Intent(android.content.Intent.ACTION_MAIN);
List<ResolveInfo> resInfoList = getPackageManager().queryIntentActivities(myIntent, 0);
Run Code Online (Sandbox Code Playgroud)
此时,我想根据包名称中包含的特定字符串(或字符串的变体)过滤列表,我也可以弄清楚如何操作.
但是这里我被卡住了.据我所知,Intent.createChooser()只需要一个目标Intent作为参数.我希望有一个重载基于包和类名或其他东西的意图列表.但我没有看到类似的东西.我在某处错过了吗?
所以问题是,这可能与内置选择器有关,还是我必须使用AlertDialog Builder构建自己的选择器?我希望避免后者.
提前致谢.
我正在搜索如何从我的应用程序发送电子邮件,我遇到了这个主题:
它解决了在他的动作发送中添加类型的问题:
i.setType("message/rfc822");
Run Code Online (Sandbox Code Playgroud)
这对我也有用,我可以发送我的电子邮件,这很棒.我只是想知道我还能在那里设置什么.
我知道,如果我没有设置任何内容,它将显示包含所有可用选项的列表.我想强制用户使用我选择的任何选项来共享它.我可以探索这个以迫使用户以我想要的方式分享吗?