我想在广播接收器中检查互联网连接; 并将结果(一个布尔标志)设置为全局变量,以便在整个应用程序中使用它,如果条件; 如果互联网断开连接,请在主活动中将状态图像视图设置为红色图像,如果已连接,则将其设置为绿色.
我跟着这个话题.但getApplication()广播接收器中没有; 而我应该使用getApplicationContext().
另一方面,这个话题:
当在广播接收器中编写代码时,它不是上下文但在其onReceive方法中给出了上下文,您只能调用getApplicationContext().这也意味着您无法保证能够在BroadcastReceiver中访问您的应用程序.
有什么顾虑?
如何在广播Receiver中访问我的应用程序类?
是否有更好的解决方案来检查互联网连接,设置全局变量和更改我的状态imageview?
android broadcastreceiver android-lifecycle android-broadcast
我正在使用DialogFragment在onCreateDialog()中返回DatePickerDialog.我已将dateSetListener设置为DialogFragment(下面的示例中为"this"),除了在屏幕旋转发生时调用onDateSet()时,一切正常,这是不可取的.如何在旋转屏幕时让onDateSet不被调用?
我的DialogFragment
public static class DateDialogFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener{
public static DateDialogFragment newInstance() {
return new DateDialogFragment();
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new DatePickerDialog(getActivity(), this, 2012, 11, 19);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
//This is called when screen rotated, which I dont want
Toast.makeText(getActivity(), "Year: "+year+" Month: "+monthOfYear+" Day: "+dayOfMonth, Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的
if(getActivity()!=null){
FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment newFragment = DateDialogFragment.newInstance();
newFragment.show(fm, "dialog");
}
Run Code Online (Sandbox Code Playgroud) 在我当前的应用程序中,第一次加载Activity时会触发onResume函数.我查看了Activity Lifecycle,但我没有找到防止这种情况发生的方法.
我是否可以在第一次加载Activity时阻止加载onResume()函数,而不使用SharedPreferences?
android onresume sharedpreferences android-lifecycle android-activity
我遇到的问题onActivityCreated()是在调用activity的onStart()方法后调用我的片段方法.这似乎意味着我的活动的onCreate()方法正在完成之后onStart()?情况不是这样......可以吗?在我的活动的生命周期中,我的片段onActivityCreated()被称为?此外,如果我有多个片段,我如何控制片段onActivityCreated()调用的顺序?
在我的活动中:
@Override
protected void onStart() {
super.onStart();
methodA(); // this is called ...
}
Run Code Online (Sandbox Code Playgroud)
在我的片段中:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
methodB(); // ... before this
}
Run Code Online (Sandbox Code Playgroud) java android android-lifecycle android-fragments android-activity
TLDR:finishAffinity()和finishAndRemoveTask()之间有什么区别?
我正在开发一个只有一个活动的Android应用程序,并使用片段切换而不是新活动.
即使在清理后台堆叠时,我也会遇到一个奇怪的问题,即通过背板生活的某个碎片.长话短说,这个片段是活的,因为我从那个片段开始了一个网络浏览器.
使用流行的按回x2在我的主要活动中退出app技术,它将使用finishAndRemove任务"退出".这将返回到某个片段,而不是完全退出.将后面的x2退出流程从finishAndRemoveTask更改为finishAffinity解决了我的问题.为什么这样做?
我有一个生命周期识别片段和一个LifecycleObserver类
public class MyFragment extends Fragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MyObserver(this);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.activity_main, container, false);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我的Observer类,它记录了所有片段事件
public class MyObserver implements LifecycleObserver {
private static final String TAG = "MyObserver";
public MyObserver(LifecycleOwner lifecycleOwner) {
lifecycleOwner.getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate(){
Log.d(TAG, "onCreate: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause(){
Log.d(TAG, "onPause: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(){
Log.d(TAG, "onDestroy: …Run Code Online (Sandbox Code Playgroud) android android-lifecycle android-fragments fragment-lifecycle
使用Android X和Android Architecture Components,即以下...
... 使 Android 开发变得更加容易,以获得更好、更稳定的应用程序。
当对 a使用ViewModel公开LiveDatas 时Fragment,目前有两个LifecycleOwners可用于oberve:
Fragment本身或Fragment的财产mViewLifecycleOwner。到目前为止,我一直并且专门将sFragment本身用于任何和所有LiveData由ViewModels公开的内容。
由于我喜欢通过频繁升级到最新的 alpha 和 beta来生活在边缘,我最近升级到:
2.2.0-rc01;1.1.0-rc01;1.2.0-rc01;2.2.0-rc01;幸运的是,在这个日期(2019 年 11 月 1 日),所有可用的候选版本都可用。
这导致在旧的 Java 代码中警告我:
为什么实际上有两个LifecycleOwners?
在设置 Fragment …
android android-lifecycle android-fragments android-architecture-components androidx
我正在使用 LiveData 和 viewmodels 构建一个简单的应用程序,但我在我的活动中收到以下警告消息,而不是我的活动中的一些警告
无法访问“androidx.activity.contextaware.ContextAware”,它是“com.example.movies.presentation.home.MoviesActivity”的超类型。检查您的模块类路径是否缺少或冲突的依赖项
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.2'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$life_cycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$life_cycle_version"
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
kapt "androidx.lifecycle:lifecycle-compiler:$life_cycle_version"
// Hilt
implementation "com.google.dagger:hilt-android:$hilt_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$life_cycle_version"
kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
//moshi
implementation("com.squareup.moshi:moshi:$moshi_version")
kapt("com.squareup.moshi:moshi-kotlin-codegen:$moshi_version")
//retrofit
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
implementation("com.squareup.okhttp3:logging-interceptor:$okhttp_version")
//espresso testing
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_core"
androidTestImplementation "androidx.test:runner:$test_runner"
androidTestImplementation "androidx.test:rules:$test_runner"
// Hilt For instrumentation tests
androidTestImplementation "com.google.dagger:hilt-android-testing:$hilt_testing"
androidTestAnnotationProcessor "com.google.dagger:hilt-compiler:$hilt_testing"
//Hilt For local unit tests
testImplementation "com.google.dagger:hilt-android-testing:$hilt_testing"
testAnnotationProcessor "com.google.dagger:hilt-compiler:$hilt_testing"
//mockk …Run Code Online (Sandbox Code Playgroud) android gradle android-lifecycle android-studio android-livedata
我现在正在使用 Jetpack Compose。我意识到我可以在可组合项中使用 ViewModel 并在可组合项中初始化视图模型,如下所示:
val myViewModel:MyViewModel = viewModel()
Run Code Online (Sandbox Code Playgroud)
但存在一个问题,即使未显示可组合项,这些视图模型也永远不会被销毁。
例如,我有一个主可组合屏幕,它根据用户交互加载一些其他屏幕,如下所示:
@Composable
fun MainAuthentication(viewModel: MainViewModel) {
val state = viewModel.state.value
val scope = rememberCoroutineScope()
val scaffoldState = rememberScaffoldState()
Scaffold(scaffoldState = scaffoldState)
{
//--------------------(login and sign up button)--------------------//
Row(
modifier = Modifier
.padding(top = 50.dp)
.fillMaxSize(),
verticalAlignment = Alignment.CenterVertically,
) {
if (!state.signUpFormIsVisible && !state.loginFormIsVisible) {
Button(
onClick = {
viewModel.onEvent(event = MainEvent.LoginButtonClick)
},
modifier = Modifier
.padding(10.dp)
.weight(0.5f)
) {
Text(text = stringResource(id = R.string.login))
}
Button(
onClick = { …Run Code Online (Sandbox Code Playgroud) 在 Jetpack Compose 中,所有屏幕都是可组合功能。FragmentsJetpack Compose 中未使用。
我们如何使用 Jetpack Compose 处理生命周期事件?如果我们使用 Fragment,我们可以处理生命周期事件 ( onStart/onPause/onResume/onStop)。这些对于释放资源、停止观察更改等不同场景很有用。
在 Jetpack Compose 中,如果我需要处理这些事件,我该如何在可组合屏幕中处理这些事件?
请帮助我提供一些想法或资源,以便我能够理解这一点。
提前致谢。
android android-lifecycle android-jetpack android-jetpack-compose