我正在开发一个应用程序,并且刚刚意识到它没有显示在最近的应用程序列表中.
我在应用程序中有2个活动,无论我在按Home键时我在哪个活动,该应用程序都不会显示在最近的应用程序列表中.
我已经看到了这个问题:SO问题但是将类别内容放在清单中并不适用于我.
以下是我的清单的一部分:
<application android:label="@string/app_name" >
<service android:name=".UploadService" android:exported="false" />
<service android:name=".DownloadService" android:exported="false" />
<activity android:label="@string/app_name"
android:excludeFromRecents="true"
android:screenOrientation="portrait"
android:name="com.test.DOHSMain" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.test.DOHSChange"
android:label="@string/app_name" >
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
有谁知道我做错了什么?
注意:我在第二个活动DOHSChange上添加了标签,以防万一有帮助但是那条线路在那里似乎没有做任何事情.
谢谢你的时间
我想知道是否onSaveInstance(),onPause()并且onStop()如果我打电话finish()或生命周期直接跳转到onDestroy().
我还想知道是否onRetainNonConfigurationInstance()总是调用android.support.v4库,或者只是因为配置更改而重新创建活动(当活动停止并放在backstack上时我可以信任吗?)
谢谢
我正在处理一个应用程序,其中我从活动A(主要活动)移动到活动B到活动C.所有这一切都正常,但问题发生在用户通过从任务托盘中删除它杀死应用程序.
要理解我的问题,说用户从A移动到B然后C,但在完成活动C中的任务之前,用户杀死了应用程序.因此,当用户再次通过按下应用程序图标打开应用程序时,我想启动用户在杀死应用程序时的最后一个活动C,而不是Android的默认行为(主要活动A)再次启动应用程序的新实例.
我尝试过的:
1)我尝试使用"onSaveInstanceState"和"onRestoreInstanceState",但我认为它们在方向改变时使用,或者我们通过按后退按钮返回.
2)我试图将所有内容保存在"onPause"中,因为当活动被破坏时,暂停调用99.99%次,并且通过使用静态标志我打开了最后一个活动,它对我有用,但我想要一些好的示例或技术来完成这项工作.
所以任何人都可以帮我实现同样的目标.. ??
我请求其他成员提供代码示例.
提前致谢.
我目前正在创建一个自定义对话框来显示从 00:00 到 23:59 的时间,我使用 kotlin 作为开发语言。我的问题是,当我打开对话框时,回收站视图出现错误。这是我的代码
日历对话框类
class CalendarDialog : DialogFragment() {
/**
* Define variables
*/
private val mDaysList : MutableList<Days> = ArrayList()
private val dayMonthYear = "2018-06-14" //TODO fetch the date of today
/**
* Initialize the adapter
*/
private val adapter = CalendarAdapter(mDaysList)
/**
* Initialize the layout manager
*/
private fun getLinearLayoutManager(): LinearLayoutManager {
return LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false)
}
private fun initView() {
setDataListItems()
recyclerViewCalendar?.adapter = adapter
recyclerViewCalendar?.layoutManager = getLinearLayoutManager()
recyclerViewCalendar?.setHasFixedSize(true)
}
override fun onCreateView(inflater: …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments kotlin android-recyclerview
我有
活动A->片段A
[由Fragment A我决定创建Activity B]
片段A - >活动B。
当我按返回按钮时,我返回到Fragment A包含数据列表的位置。按下后退按钮时,我想更新此列表。不,我不在本地存储数据,并且发出另一个请求太昂贵了。有没有简单的方法可以通过按[返回从活动B到片段A]的后退按钮传递修改的对象X?怎么样?
我刚刚发现使用 API 24 的 Pixel 模拟器出现永久性崩溃。我的真实设备和其他一些模拟器没有此错误。
我正在做的事情如下:在一个片段中,我尝试使用以下代码添加另一个片段:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val fragmentTransaction = requireFragmentManager().beginTransaction()
val fragment = ComposableTableReportFragment.newInstance(null)
fragmentTransaction.add(R.id.tableContainer, fragment)
fragmentTransaction.commit()
Run Code Online (Sandbox Code Playgroud)
这会导致我的应用程序启动时发生以下崩溃。
E/AndroidRuntime: FATAL EXCEPTION: main
Process: net.pokeranalytics.android, PID: 20332
java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState
at androidx.fragment.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:2080)
at androidx.fragment.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2106)
at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:683)
at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:637)
at net.pokeranalytics.android.ui.fragment.StatisticsFragment.initUI(StatisticsFragment.kt:71)
at net.pokeranalytics.android.ui.fragment.StatisticsFragment.onViewCreated(StatisticsFragment.kt:62)
Run Code Online (Sandbox Code Playgroud)
我已经尝试过各种方法,因为崩溃非常频繁,但似乎每个案例都是独特的,并且没有找到适合我的解决方案。谢谢你的帮助!
我目前正在使用绑定来使用 android 视图模型动态设置各种文本视图的文本。目前视图模型看起来像这样:
class MyViewModel(
resources: Resources,
remoteClientModel: Model = Model()
) : ObservableViewModel() {
init {
observe(remoteClientModel.liveData) {
notifyChange()
}
fun getTextViewTitle(): String = when {
someComplicatedExpression -> resources.getString(R.string.some_string, null)
else -> resources.getString(R.string.some_other_string)
}
}
Run Code Online (Sandbox Code Playgroud)
和 xml 布局:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
<variable
name="viewModel"
type="my.app.signature.MyViewModel"/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.textViewTitle}"
android:textAlignment="center"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
但是我想删除注入到视图模型中的“资源:资源”,因为资源与活动耦合。代码现在只返回字符串资源 ID:
fun getTextViewTitle(): Int = when {
someComplicatedExpression -> R.string.some_string
else -> R.string.some_other_string
}
Run Code Online (Sandbox Code Playgroud)
因此,我删除了活动依赖项。编译器认为这很好,但它在运行时崩溃并出现以下异常:android.content.res.Resources$NotFoundException: …
我正在浏览这个 Codelab: https: //developer.android.com/codelabs/android-lifecycles#6 它解释了如何在 ViewModel 中使用 SavedStateHandle 来避免进程死亡。ViewModel的构造函数如下:
private SavedStateHandle mState;
public SavedStateViewModel(SavedStateHandle savedStateHandle) {
mState = savedStateHandle;
}
Run Code Online (Sandbox Code Playgroud)
并且viewmodel在Activity中初始化如下:
mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);
Run Code Online (Sandbox Code Playgroud)
ViewModel 的构造函数何时被调用?而Viewmodel是如何获取savedStateHandleViewModel的参数的呢?
编辑:
我通过这篇博文找到了问题的答案: https://www.rockandnull.com/viewmodel-savedstate/
它表示,如果 是SavedStateHandle视图模型构造函数中的唯一参数,则by viewModels委托会自动将其提供给视图模型。
然而,如果我们有依赖注入框架(Hilt)提供的自定义参数的组合,例如:存储库,还有一些其他运行时参数,例如:选定的类别 ID 和 SavedStateHandle 来帮助我们在视图模型的构造函数中避免进程死亡- 我们如何向工厂提供所有这些参数?
请发布一个小例子以供我的理解
我有一个以 ListView 作为主要活动的活动。选择列表中的一个项目时,它将启动新的活动,从选中的列表中显示有关项目的详细信息。代码运行良好,相关细节如下:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("test","test");
ListView listView=(ListView) findViewById(R.id.name_list);
ListAdapter adapter=new SimpleAdapter(this,contactList,
R.layout.list_item,new String[]{TAGS[2]},new int[]{R.id.list_name_display});
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Intent intent=new Intent(MainActivity.this,SingleContactActivity.class);
intent.putExtra(EXTRA_CONTACT_POSITION,position);
startActivity(intent);
}
});
}
Run Code Online (Sandbox Code Playgroud)
新创建的活动具有作为父活动的主要活动,因此当我查看完它时,我按操作栏上的向上按钮返回到列表视图。但是,该Log.d(...)行告诉我,每次转到详细信息活动,然后返回主活动时,都会重新创建主活动。
我不想要这个和我读这个的方式:https : //developer.android.com/training/basics/activity-lifecycle/stopping.html是当新的活动开始时应该停止主要活动,并且然后开始,然后按向上按钮恢复。有人知道我的主要活动被破坏的原因吗?
谢谢您的帮助
编辑:清单文件
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter> …Run Code Online (Sandbox Code Playgroud) 我在finish()方法和finishAndRemoveTask()方法之间几乎没有混淆。如果有人对此有所了解,请解释它们之间的区别。