我有一项活动,希望在推出时通过一些额外的活动.
当销毁并重新创建此活动时,getIntent()从内部调用返回的意图是否onCreate()包含最初启动活动时存在的相同内容?
所以我有一个非常基本的布局,在屏幕的顶部有一个EditText和一个Button.当有人点击按钮时,EditText输入将保存到文本视图中,然后隐藏EditText以及按钮.这是我的代码:
public void setName(View view){
EditText editText = (EditText) findViewById(R.id.getUserName);
Button button = (Button) findViewById(R.id.setName);
TextView textView = (TextView) findViewById(R.id.displayName);
playerName = editText.getText().toString();
textView.setText(playerName);
editText.setVisibility(View.GONE);
button.setVisibility(View.GONE);
textView.setTextSize(40);
textView.setVisibility(View.VISIBLE);
}
Run Code Online (Sandbox Code Playgroud)
好吧,当屏幕旋转时,再次调用onCreate,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_score_keeper);
// Identifies a textView
TextView textView = (TextView) findViewById(R.id.displayName);
// Hide that textView until later
textView.setVisibility(View.GONE);
// Set player name to default value
playerName = "Player Name";
// Set score to default value
score = 0;
}
Run Code Online (Sandbox Code Playgroud)
这个问题是它丢失了我隐藏EditText和Button的事实,并且还再次隐藏了TextView.
如何保持所有这些属性相同?(例如,保持文本相同,文本大小,视图的可见性等); 是否可以使用onSaveInstanceState?
多谢你们.
OSFTW
我有活动A,它有一个带自定义适配器的ListView.
自定义适配器(适用于每个列表视图项)具有一个调用自定义对话框的按钮.
在此对话框中正在执行一个操作,作为响应,我想调用活动A上的UI更新.
这是我对简历代码的活动:
@Override
public void onResume()
{
super.onResume();
setUI();
}
Run Code Online (Sandbox Code Playgroud)
但是当我打电话的时候
dialog.dismiss();
Run Code Online (Sandbox Code Playgroud)
该对话框关闭,而不调用Activity A OnResume方法benig.
我如何捕捉和更新活动ui?
每次显示时,我都尝试boolean在类中使用 a 来做一些事情。FragmentFragment
我的应用程序启动,打开 ,FirstFragment并且boolean第一次总是true,然后我有一个if子句检查其值:
if (FirstTime) {
FirstTime = false;
} else {
// Other stuff here, cause it's not true.
}
Run Code Online (Sandbox Code Playgroud)
然后,在第一次,什么时候FirstTime,true我做了一些事情,比如去另一个地方Fragment。当我返回Fragment1并在我的 上时onCreate(),我也会做同样的事情。总是true,看起来很清爽什么的。
然后我认为这可能是 的问题Fragment,每次我按 时Fragment1,它都会重新启动或发生其他情况。然后,我在我的中添加了 getter 和 setter MainActivity:
public Boolean getFirstTime() {
return FirstTime;
}
public void setFirstTime(Boolean FirstTime) {
this.FirstTime = FirstTime;
}
Run Code Online (Sandbox Code Playgroud)
从一开始,这是真的,然后,我将代码更改Fragment1 …
java android sharedpreferences android-lifecycle android-fragments
我经常看到帖子指出文件写入应该在后台线程中完成,即使应用程序正在关闭(onStop ) - 即使该工作对应用程序至关重要。
我对此很困惑。当然,这是 Android应该(或许必须)宽松地给予应用程序完成时间的onStop唯一一个 UI 调用。关键。
我担心在后台线程上执行关键工作不会通知操作系统该工作很关键并且需要完成。
与此相关的有几个方面:
----- 是什么困扰着我;我写这个问题的原因-----
onStop 返回的信号是否不会onStop向 Android 表明该应用程序已完成关键操作,并且即使 Android 立即终止该应用程序,该应用程序在恢复时也将正常运行?(换句话说,在我看来,[在后台线程中完成关键工作]的建议是错误的。我试图以某种方式找到证据。这就是我写这个问题的原因。)
----- 是否存在任何支持背景方法的证据?-----
有证据表明,如果我遵循建议并在后台线程中完成工作,Android 在决定是否可以终止应用程序时会考虑该正在运行的线程的存在。[如果我正在编写一个移动操作系统,我不会太重视后台线程的存在。我怀疑大多数复杂的应用程序都有后台线程仍在运行。]
有证据表明延迟返回onStop最多 200 毫秒是不好的。
----- 或者是否存在任何证据表明可以在前台执行此操作?-----
----- 或者大型应用程序编写者做什么?-----
注意:我看到了很多意见。我不需要再听任何意见了。寻找证据。
注意:我对创建 …
我正在使用 google android 架构组件,并且我有一个前台服务,它是 LifeCycleService。
问题是当我尝试从我的存储库观察 LiveData 时,可观察的 onChanged 不会触发。如果我使用observeForever而不是observe它会触发。
什么会导致这样的问题?
service lifecycle android android-lifecycle android-livedata
我在我的应用程序中使用 MVVM 架构,我想从活动的视图模型类发出 API 请求。这里的问题是我没有得到最好的方法。由于 viewmodel 已经知道该活动的生命周期,所以不需要为 API 制作单独的 viewmodel 类?如果是这样,那么我应该从 viewmodel 类中触发正常的改造请求,或者在这种情况下最好的方法是什么?
我之前在没有 MVVM 的情况下所做的是:
class UserViewModel : ViewModel() {
private val cd = CompositeDisposable()
val status: MutableLiveData<Boolean>? = MutableLiveData<Boolean>()
val responseImages = MutableLiveData<ResponseImages>()
fun getImages(text: String) {
cd.add(
RetrofitHelper.apiInstance.getImages(Site.METHOD, Site.KEY, text)
.myApiSubscriber(status)
.subscribe({
responseImages.postValue(it)
}, {
it.printStackTrace()
})
)
}
private fun <T> Single<T>.myApiSubscriber(status: MutableLiveData<Boolean>?): Single<T> {
return this.doOnSubscribe {
status?.postValue(true)
// Utils.debugger("PROGRESS ", " doOnSubscribe")
}.doFinally {
status?.postValue(false)
// Utils.debugger("PROGRESS ", " doFinally")
}.subscribeOn(Schedulers.io())
}
override fun …Run Code Online (Sandbox Code Playgroud) 我有一个ViewModel具有 type 属性的属性LiveData<UserData>,正在从 Room 数据库中读取。
其代码如下:
class UserDataViewModel(application: Application) : AndroidViewModel(application) {
private val userDataDao: UserDataDao = AppDatabase.getInstance(application).dao()
val userData: LiveData<UserData?> = userDataDao.getUserData()
}
Run Code Online (Sandbox Code Playgroud)
在关联的活动中,我获得了对视图模型的引用:
private val viewModel: UserDataViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)
UserData在该活动中,我需要获取按钮单击的值:
private fun handleClick(view: View) {
viewModel.userData.value?.let {
// do stuff if the userData is present
}
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,除非用户在加载数据之前按下按钮,否则它永远不应该为空。
然而,正如代码所示,对的调用viewModel.userData.value始终为空,并且该let块永远不会执行。
但是,如果我在 中添加此语句onCreate,let单击处理程序中的块将根据需要执行:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.userData.observe(this, Observer {
// do nothing …Run Code Online (Sandbox Code Playgroud) android android-lifecycle kotlin android-room android-livedata
我正在尝试使用访问ParentViewModelfor 。这是我的代码。ParentFragmentChildFragmentviewModels
// In ParentFragment
class ParentFragment : Fragment() {
val parentViewModel: ParentViewModel by viewModels {
ParentViewModelFactory(getRepository())
}
...
}
// In ChildFragment
class ChildFragment : Fragment() {
val parentViewModel: ParentViewModel by viewModels(
{ requireParentFragment() }
)
...
}
Run Code Online (Sandbox Code Playgroud)
但是,此代码仅LiveData在我设置变量ParentViewModel并ParentFragment像这样观察它时才有效:
parentViewModel.text.observe(this) {
toast(it)
}
Run Code Online (Sandbox Code Playgroud)
ViewModel我从内部观察是没有用的ParentFragment。我只需要它来lifecycle定义ChildFragments。
如果我摆脱上面的观察,我会得到这个错误:
'java.lang.RuntimeException:无法创建类 ParentViewModel 的实例'如何让 ChildFragments 访问
ParentViewModel而不设置虚拟实时数据对象,以便ParentFragment可以观察它们。 我想开始一项新的活动,但仅在我的Crouton展示之后.
我想使用Crouton的onDisplayed()函数 https://github.com/keyboardsurfer/Crouton/blob/master/library/src/de/keyboardsurfer/android/widget/crouton/LifecycleCallback.java
然后按如下方式调用我的活动
Intent i = new Intent(this, MyNewActivity.class);
startActivity(i);
finish();
Run Code Online (Sandbox Code Playgroud)
我一直在尝试创建我的回调函数,但到目前为止没有运气...
谢谢!
android ×10
java ×4
kotlin ×2
android-mvvm ×1
android-room ×1
callback ×1
crouton ×1
lifecycle ×1
mvvm ×1
rx-android ×1
service ×1