android - 如何更新 "onResume"上的 Activity ?

标签 android android-activity onresume

我有一个包含一些文本的 ListView 。但是当 ListView 为空时,它将显示一个按钮,将您带到一个新 Activity ,您可以在其中键入一些文本,它会保存在 SharedPreferences 上并完成。我希望 Listview 的 Activity 在另一个关闭时更新。我尝试了 onResume() 但由于某种原因它会永远保持刷新状态。我该怎么做?
顺便说一句,我正在更新使用:
startActivity(getIntent()); 完成();
有更好的方法吗?
谢谢。



编辑--------------------------------------------
正如@Alex Loper 所说,我在 onResume() 方法中添加了 notifyDataSetOnChange()。但它因以下日志而崩溃:

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)

我的课是这样的:

ArrayAdapter<String> adapter;
User user;

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

    user = getUserData();
    fillUserParty(user);
    fillAdapter(user);

    ListView partiesListView = (ListView) findViewById(R.id.parties_list_view);
    Button goToCreatePartyButton = (Button) findViewById(R.id.go_to_create_party_button);
    if(adapter != null){
        partiesListView.setVisibility(View.VISIBLE);
        partiesListView.setAdapter(adapter);
    }else{
        goToCreatePartyButton.setVisibility(View.VISIBLE);
        goToCreatePartyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(YourPartiesActivity.this, CreatePartyActivity.class));
            }
        });
    }
}

@Override
protected void onResume() {
    super.onResume();
    adapter.notifyDataSetChanged();
}

private void fillAdapter(User user){
    List<Party> parties = user.getParties();
    if(parties != null) {
        for (int i = 0; i < parties.size(); i++) {
            Party party = parties.get(i);
            adapter.add(party.getName());
        }
    }
}

private void fillUserParty(User user){
    SharedPreferences preferences = getSharedPreferences("Parties", MODE_PRIVATE);
    int numOfParties = CreatePartyActivity.checkNumberOfParties(preferences);
    for(int i=0; i<numOfParties; i++){
        String partyName = preferences.getString("Name" + i, "");
        if(partyName != ""){
            int id = preferences.getInt("Id" + i, 0);
            Party party = new Party(id, partyName);
            user.joinParty(party);
        }
    }
}

public User getUserData(){
    SharedPreferences preferences = getSharedPreferences("User", 0);
    int id = preferences.getInt("Id", 0);
    String username = preferences.getString("Username", "");
    String name = preferences.getString("Name", "");
    return new User(id, username, name);
}

最佳答案

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

要解决空指针异常,像这样更改 onResume 方法:

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

关于android - 如何更新 "onResume"上的 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34551642/

相关文章:

安卓游戏,电池使用率非常高

android - 如何在Android中存储长文本?

java - 无法正确访问共享首选项数据

android - onCreate 没有在调试版本中被调用?

android - 恢复应用程序时我失去了对 Android 的 Webview 的控制

java - 使用 ListView 从另一个 Activity 打印 ArrayList

java - Fragment 和 MainActivity java 代码之间的区别?

Android float Activity 与滑动关闭

android - 记录在 Android 中启动的 Activity

java - 保存checkedtextview状态时出现问题,它对多个项目表现不佳