- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 Activity :MainActivity 和 OtherActivity。 MainActivity 中的一个 fragment 启动了 OtherActivity,但是当我按下顶部的后退按钮时,它返回到 MainActivity 而不是 fragment 启动了 OtherActivity。
最终结果是最终用户被送回主屏幕,而不是他们正在使用的 fragment 。
这是我的 list 。我已将 MainActivity 设置为 OtherActivity 的父级:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".OtherActivity"
android:parentActivityName="com.example.test.MainActivity" >
</activity>
在 MainActivity 中,当用户点击按钮时,它会加载一个列表 fragment :
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
button.findViewById(R.id.events).setOnClickListener(new View.OnClickListener() {
Fragment ef = new MyItemsFragment();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(R.id.content, ef, "my_fragment");
fragmentTransaction.commit();
});
}
public void callOtherActivity() {
Intent i = new Intent(this, OtherActivity.class);
this.startActivity(i);
}
当单击列表 fragment 中的项目时,它会启动 OtherActivity。很多代码都是由 android studio 自动生成的。我已经改变了一些。在 MyItemsRecyclerViewAdapter 中:
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (null != mListener) {
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mListener.onEventFragmentInteraction(holder.mItem);
MainActivity ma = (MainActivity) holder.mView.getContext();
ma.callOtherActivity();
}
}
});
}
请注意,它会调用 ma.callOtherActivity()
,它在 MainActivity 中定义,并且会在单击列表 fragment 中的项目时启动 OtherActivity。
这是OtherActivity:
public class OtherActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
}
}
现在,当我点击 OtherActivity 中的后退箭头按钮时,应用将只显示 MainActivity,而不是用户最后看到的列表 fragment 。
如何确保从 OtherActivity 返回时,用户会再次看到列表 fragment 以获得更好的用户体验?
编辑:“后退”按钮似乎令人困惑。也许它们是相同的,但我说的是切换 Activity 时的那个。它不是用于退出应用程序的后退按钮。 See image
最佳答案
当您开始一个新的 Activity 时,现有的 Activity 会堆叠起来,以便您稍后可以检索它,例如当您按返回键时。
按下返回键后, Activity 将重新启动。这是重要的部分。它不仅恢复到上次使用时的原样。这意味着您作为开发人员必须注意将 Activity 恢复到您希望它所处的状态。任何 fragment 都将处于正确的状态,但您必须注意不要在 Activity 重新启动时覆盖该状态。
在您的情况下,我怀疑您的 MainActivity 代码不加区别地重新初始化您的 fragment ,而不是检查 fragment 是否已经存在于该特定 Activity ,然后才有条件地初始化它们(仅当它们不存在时)。
很难确定,因为您没有在问题中包含任何代码。检查在 MainActivity 中显示 fragment 的代码。在显示它们之前,您是否检查是否已经有可见的 fragment ?如果不是,你应该是。
例如,下面的代码在一个 Activity 中,首先检查一个 fragment 是否已经显示,然后再添加一个新 fragment 。本质上,这是第一次运行时,不会有 fragment ,因此 existing
将为空,并且会创建并显示一个新的 fragment 。
在您开始一个新的 OtherActivity
等然后使用返回键返回到此 Activity 后,existing
将不再为 null,因为 Fragment 系统将恢复任何现有 fragment 放回您的容器中。因此我们实际上什么都不做。
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
Fragment existing = getSupportFragmentManager().findFragmentById(R.id.content);
if (existing == null) {
Fragment newFragment = new MyFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.content, newFragment)
.commit();
}
}
希望这是清楚的。
关于android - 从另一个 Activity 返回后返回到 MainActivity 的 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45158403/
因此,我正在学习 Lynda.com 上关于使用 Google map V2 构建移动应用程序的教程,并且我正在学习一个让您创建 map 应用程序的部分,该应用程序以编程方式查找位置,而不是依赖于se
我有一个 Mainactivity,其中包含一个 Layout,它是 4 个子布局的父级。单击子布局后,我将使用一个新 fragment 替换主布局。但我无法在按下返回按钮后返回 MainActivi
如你所见 this@MainActivity 或 MainActivity@this 在 kotlin 中开始 Activity 时有效。我试图找出答案,但我什么也没找到。谁能知道它的确切区别以及哪个
Solve by using getActivity() 我有这个 MainActivity.java 和 RepeatEntry.java 在我的 MainActivity 中,我有这个代码来实现
我正在尝试将 Google Analytics 集成到我的应用程序中,并遵循来自 here 的教程一切就绪: 我有一个 MainActivity,它扩展了 Activity 并附加了三个 Tab Fr
EditText 对象未创建,为什么? EditText editText=(EditText)findViewById(R.id.edittext); 这适用于扩展 AsyncTask 类的应用程序
所以我正在尝试了解 Android Fragments。如果我将以下代码放入我的 MainActivity 中: public void getMessage(Object obj) { Lo
我试图在我的Android设备上运行我的Android应用程序,但它一直显示我的主活动不存在,尽管我的主活动类在那里。我试图创建一个新的项目,然后复制我以前的代码,它在一段时间内奏效了。但随后它又产生
//主要活动 package com.going.books; import androidx.appcompat.app.AppCompatActivity; import androi
这似乎是一个我不好意思问的基本问题,但我对我的 Fragment 学习曲线感到非常沮丧,以至于我会暴露我的无知。 教科书中的一个例子,它削减了很多角落,使得扩展变得困难,即使它们有效,也没有按钮可以点
我正在将我的启动 Activity 从“MainActivity”更改为“RealMain”我在 list 中声明了这一点,但是 MainActivity 仍然首先出现。有人可以启发我吗?代码来 se
它失败了@ below line - bindService(intent, m_serviceConnection, Context.BIND_AUTO_CREATE); 下面是轨迹.... Act
我的项目在调试状态下正常工作。当我打开MainActivity.java文件时,这在import androidx.annotation.NonNull;上显示了问题 并在下面显示错误。 FAILUR
我在 MainActivity 类中看到了这样的代码: class MainActivity : AppCompatActivity() { private val languages = a
我的问题是关于如何制作启动屏幕,并在 MainActivity 完成渲染时完成启动屏幕,而不是通过设置超时。 我已经搜索过如何制作闪屏并且我已经做到了,但主要是他们使用超时来设置闪屏何时必须关闭/完成
大家好,我正在尝试为我的 Android 手机开发一个手电筒应用程序,但是当我运行它时出现错误。 GUI 有 2 个按钮:1 个用于开灯,另一个用于关灯 这是代码: package com.examp
如何解决这个问题? MainActivity.this is not an enclosing class. 谢谢 public class uploadToServer extends AsyncT
我的 logcat 中出现一些错误,并且我的应用程序无法在我的智能手机上运行...我更改了 list 和 MainActivity 中的一些代码(名为 HomaActivity ) 这是我的 list
我想知道使用单例 MainAcitivity 是否是一个糟糕的设计选择,如下所示: public class MainActivity extends AppCompatActivity ... {
我正在创建一个像 WhatsApp 一样的应用程序,但我遇到了问题。该应用程序应该进入 LoginActivity,但它直接进入 MainActivity,而无需我登录。 我尝试更改 Android
我是一名优秀的程序员,十分优秀!