应用程序的结构如下:
tabHost (in Activity) -> contains -> TabFragment(extend base container fragment)
Run Code Online (Sandbox Code Playgroud)
1.活动中的代码:
tabHost.addTab(
tabHost.newTabSpec("home").setIndicator("",
getResources().getDrawable(R.drawable.btn_home)),
HomeFragment.class, null);
Run Code Online (Sandbox Code Playgroud)
2. HomeFragment中的代码 (注意HomeFragment不是实际的函数,而是像这样的容器,它扩展了BaseContainerFragment):
public class HomeFragment extends BaseContainerFragment {
public Home homeFrag;
private boolean mIsViewInited;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.container_fragment, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (!mIsViewInited) {
mIsViewInited = true;
initView();
}
}
private void initView() {
homeFrag = new Home();
replaceFragment(homeFrag, false);
}
}
Run Code Online (Sandbox Code Playgroud)
3. BaseContainerFragment
public class BaseContainerFragment …Run Code Online (Sandbox Code Playgroud) android android-tabhost android-fragments android-activity onactivityresult
我想将此添加到另一个关于resultCode == 0和的问题列表中requestCode == 0.
这是概要:
使用NoteActivity调用.NoteSettingsActivitystartActivityForResult()
我在网上搜索过,当我按下按钮的时候super.onBackPressed(),resultCode == 0.好后进一步研究,似乎它返回代码每次按下后退按钮,但拙劣地修补,经过super.onBackPressed()电话,只是简单finish()的应用onActivityResult()的resultCode仍是等于0.它跟相同requestCode.
此外,我尝试操作清单文件,我做了很多更改只是为了让这项工作,但nothings对我有用.
这是片段.请注意,我已经恢复到我之前的提交,所以我已经失去了我最近的修改,但请注意我写的代码之前我注意到它resultCode总是等于0(ACTIVITY_CANCELED)
@Override
public void onNoteSettingsActivityCalled(Note note)
{
Intent intent = new Intent(this, NoteSettingsActivity.class);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_ID, note.getNoteID());
startActivityForResult(intent, NoteRequest.REQUEST_UPDATE_SETTINGS);
}
Run Code Online (Sandbox Code Playgroud)
这是检测到活动的时间:
@Override
public void onBackPressed()
{
Log.i(NoteApplication.TAG, "NoteSettingsActivity.onBackPressed() has been called.");
Intent intent = new Intent();
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDENABLED , mRemindEnabled);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDEVERY , mDaysSelected);
intent.putExtra(NoteExtrasKey.EXTRA_NOTE_REMINDON , String.valueOf(mRemindDateTime)); …Run Code Online (Sandbox Code Playgroud) @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
filePath = getOutputMediaFile(FileColumns.MEDIA_TYPE_IMAGE);
File file = new File(filePath);
Uri output = Uri.fromFile(file);
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, output);
startActivityForResult(i, RETURN_FILE_PATH);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//data is always null here.
//requestCode = RETURN_FILE_PATH;
//resultCode = Activity.RESULT_OK;
}
Run Code Online (Sandbox Code Playgroud)
我检查了文件和输出Uri的值,两者都很好,捕获的图像实际上存在于该位置.
但是,在捕获图像后,返回的数据onActivityResult总是存在null.
编辑:
我查了这个问题:
其中说:
每当通过传递具有相机意图的EXTRAOUTPUT来保存图像时,onActivityResult内的数据参数始终返回null.因此,不使用数据来检索图像,而是使用文件路径来检索位图.
也许这个解决方案对我有用.但是我的上述代码到目前为止是一个工作代码.
我的应用正在尝试安装APK.
Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
installIntent.setData(Uri.fromFile(new File(pathToApk)));
installIntent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
installIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity)context).startActivityForResult(installIntent, Constants.APP_INSTALL_REQUEST);
Run Code Online (Sandbox Code Playgroud)
在我的活动中
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case Constants.APP_INSTALL_REQUEST:
if(resultCode == RESULT_OK){
Log.e(TAG, "Package Installation Success");
}else if(resultCode == RESULT_FIRST_USER){
Log.e(TAG, "Package Installation Cancelled by USER");
}else{
Log.e(TAG, "Something went wrong - INSTALLATION FAILED");
}
Run Code Online (Sandbox Code Playgroud)
当我的startActivityResult被触发时,我的活动会立即获得结果代码0,该代码对应于RESULT_CANCELLED,而系统安装UI仍在等待用户权限.

我的活动是实际了解安装是否成功,并基于该更新其UI.
任何帮助都值得赞赏.
android android-intent android-ui start-activity onactivityresult
我不明白为什么我们使用方法getIntent().
因为,当我们需要那个方法时,我们可以使用方法onActivityResult().
但是通过使用方法getIntent(),它可能会导致NullPointerException.
任何人都可以解释我(android新手)?
我在Android应用程序中遇到问题.我不知道为什么在按下操作栏的"向上导航"按钮时没有调用'onActivityResult'方法.我想我已经做好了一切:
Intent intent = new Intent(ParentActivity.this, ChildActivity.class);
startActivityForResult(intent, 1000);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (data != null && requestCode == 1000) { Bundle extras = data.getExtras(); Boolean rc = extras.getBoolean(MyConstants.INTENT_EXTRA_RESULT); if (rc) { ....... } } }
Run Code Online (Sandbox Code Playgroud)public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { Intent result = new Intent((String)null); result.putExtra(MyConstants.INTENT_EXTRA_RESULT, true); setResult(RESULT_OK, result); NavUtils.navigateUpFromSameTask(this); return true; } else { return super.onOptionsItemSelected(item); } }
public void …Run Code Online (Sandbox Code Playgroud)我想在多个活动中使用一个片段。在我将在第一个活动中使用它,我创建了它
final ScoreBoard fragment = new ScoreBoard();
getFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
在第二个活动中,我在 onCreate() 方法中放置了相同的代码。但是,即使我已经通过 onSavedInstanceState() 和 onActivityCreated() 保存了它们,片段也会不断重置并且不会将其值保留在第二个活动中。我是在重新创建片段并重置它吗?谢谢你。
android-fragments android-activity android-fragmentactivity onactivityresult onsaveinstancestate
我正在尝试使用新的 Activity Results API 来替换 startActivityForResult。如果我在 Fragment 中调用 registerForActivityResult 一切正常。但是,如果我在 AppCompatActivity 中调用相同的方法,IDE 会显示“未解析的引用”错误。无论如何,应用程序构建时没有错误并按预期运行。如何删除 IDE 中的“未解析引用”错误?
我使用: import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity
依赖项:“androidx.activity:activity-ktx:${versions.activity_ktx}”“androidx.fragment:fragment-ktx:${versions.fragment_ktx}”
OnActivityResult()在 androidx 中已弃用。我参考了以下链接
https://developer.android.com/training/basics/intents/result
https://developer.android.com/jetpack/androidx/releases/activity
https://proandroiddev.com/is- onactivityresult-deprecated-in-activity-results-api-lets-deep-dive-into-it-302d5cf6edd
我在我的项目中实现了注册事情..like .我通过注册活动来创建 resultcontract 代替startActivityForResult i 替换 resultcontract.launch(intent)并获得结果resultcontract (按照上面的链接)。现在我怀疑打开 gps 的功能。为此,我们使用了
val rae = e as ResolvableApiException
rae.startResolutionForResult(context, GPS_REQUEST)
Run Code Online (Sandbox Code Playgroud)
早些时候 startActivityForResult,现在 startResolutionForResult
对如何获得 gps 请求的结果感到困惑(在代码中,我们在 onActivityResult 中获得结果)。我该如何使用新方法实现这一点?
android deprecated onactivityresult startactivityforresult androidx
我正在为 android使用应用程序内更新,并且根据文档,他们使用 onActivityResult 来处理应用程序行为,以防更新中断。
这是从我的片段调用的我的函数:
private fun startImmediateUpdate(appUpdateInfo: AppUpdateInfo) {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE,
requireActivity(),
Constants.CODES.APP_UPDATE_REQUEST_CODE
)
}
Run Code Online (Sandbox Code Playgroud)
这就是我处理父活动结果的方式
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) {
Constants.CODES.APP_UPDATE_REQUEST_CODE -> {
if (resultCode != RESULT_OK || resultCode == RESULT_CANCELED || resultCode == ActivityResult.RESULT_IN_APP_UPDATE_FAILED) {
//Do whatever i want to
}
}
}
super.onActivityResult(requestCode, resultCode, data)
}
Run Code Online (Sandbox Code Playgroud)
现在 super.onActivityResult(requestCode, resultCode, data) 已弃用。目前一切正常,但我担心如果应用程序完全消失,应用程序会崩溃
我可以做些什么来替换 onActivityResult()?我查看了 registerForActivityResult() 但找不到适合我的用例的任何内容。