如何在“onResume”上更新活动?

时间:2015-12-31 21:15:04

标签: android android-activity onresume

我有一个填充了一些文字的列表视图。但是当列表视图为空时,它会显示一个按钮,将您带到一个新活动,您可以在其中键入一些文本并保存在SharedPreferences上并完成。我希望Listview的Activity在关闭另一个时更新。我试过onResume(),但由于某种原因它永远保持清爽。我该怎么做?
顺便说一句,我正在更新:
x
有更好的方法吗?
感谢。



EDIT ----------------------------------------------- <无线电通信/> 正如@Alex Loper所说,我在startActivity(getIntent()); finish();方法中添加了notifyDataSetOnChange()。但是这个日志崩溃了:

onResume()

我的班级是这样的:

12-31 19:45:05.284  11864-11864/com.nerv.cas.partying E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.nerv.cas.partying, PID: 11864
java.lang.RuntimeException: Unable to resume activity {com.nerv.cas.partying/com.nerv.cas.partying.YourPartiesActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2812)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2845)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2262)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.nerv.cas.partying.YourPartiesActivity.onResume(YourPartiesActivity.java:48)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1215)
        at android.app.Activity.performResume(Activity.java:5327)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2797)
            at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2845)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2262)
            at android.app.ActivityThread.access$800(ActivityThread.java:139)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5086)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

3 个答案:

答案 0 :(得分:1)

onResume()中调用listview适配器的notifyDataSetChanged()方法,使用新信息重新绘制列表视图。

编辑:根据发布的代码和堆栈跟踪,适配器在使用之前从不实例化并导致NPE。在调用if(adapter != null){之前实例化适配器,以便正确填充它。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_your_parties);

    ListView partiesListView = (ListView) findViewById(R.id.parties_list_view);
    adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);

    user = getUserData();
    fillUserParty(user);
    fillAdapter(user);
    partiesListView.setAdapter(adapter);

    Button goToCreatePartyButton = (Button) findViewById(R.id.go_to_create_party_button);
    goToCreatePartyButton.setVisibility(View.VISIBLE);
    goToCreatePartyButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            startActivity(new Intent(YourPartiesActivity.this, CreatePartyActivity.class));
        }
    });

}

答案 1 :(得分:1)

如果您使用数据库和&#34; contentprovider&#34;,您将能够使用Loaders(LoaderCallback)来帮助监控基础数据源中的更改。

你会意识到,当第二个活动开始时,第一个活动会暂停,然后在大约10秒后调用ondestroy。所以依赖onresume来管理状态可能会很紧张

答案 2 :(得分:1)

我无法在已发布的代码中找到初始化适配器。我认为适配器总是为空!

要解决空指针异常,请更改onResume方法,如下所示:

@Override
protected void onResume() {
  super.onResume();
  if (adapter != null)
     adapter.notifyDataSetChanged();
}