导航后,活动UI无法刷新

时间:2016-01-22 10:50:25

标签: java android listview swiperefreshlayout

我有三个Activites:MainActivity(带有ListView),SettingsActivity和NoteActivity(用于显示备注)。 MainActivity启动SettingsActivity或NoteActivity。

当我在设置或NoteActivity中按回(在我的手机的导航栏上)时,我返回到MainActivity并调用listadapter.notifyDataSetChanged()。 Listview刷新,一切正常。 当我按下(Settings或NoteActivity工具栏中的后退箭头)时,会调用相同的方法,但Listview不会刷新。 这只发生在我向上导航时,而不是在我向后导航时。

MainActivity在Manifest中设置为父Activity:

<activity
    android:name=".settings.SettingsActivity"
    android:parentActivityName=".MainActivity"
    android:label="@string/title_activity_settings" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="de.MainActivity" />
</activity>

导航后,其他UI元素(如SwipeRefreshLayout)也无效。我使用调试器来查看行为的差异,但在这两种情况下都会调用相同的方法。

有人知道问题出在哪里吗?请告诉您是否需要更多代码。

//编辑:一些代码

我的MainActivity的相关代码:

public class MainActivity extends AppCompatActivity {
    private List<Note> notes;
    private ListView listView;
    private ArrayAdapter<Note> adapter;
    SwipeRefreshLayout srl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onClickFab(view);
            }
        });

        notes = NoteManager.Instance.getNotes(this);
        adapter = new NoteAdapter(this,notes);
        listView = (ListView)findViewById(R.id.listview);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                itemClickedAction(view, position, id);
            }
        });

        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                return itemLongClickedAction(view, position, id);
            }
        });

        srl = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
        srl.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                startSync();
            }
        });

        this.startSync();
    }

    private void startSync(){
        Log.d(this.getClass().getName(), "Start Sync");
        NoteManager.Instance.sync();
    }


    public void syncFinished(){
        Log.d(this.getClass().getName(), "Sync finished");
        this.datasetChanged();
        if(srl.isRefreshing()) {
            srl.setRefreshing(false);
        }

    }

    public void datasetChanged(){
        Log.d(this.getClass().getName(), "DataSetChanged");
        adapter.notifyDataSetChanged();
    }

}

我的NoteActivity的onDestroy-Method告诉NoteManager调用mainActivity.datasetChanged()。记录方法调用,因此必须调用该方法。按下时它会起作用,但按下时则不起作用。在这两种情况下,我都会看到日志。

SwipeRefresh布局相同。调用startSyncsyncFinished - 方法。但是,虽然调用了srl.setRefreshing(false),但加载动画并没有停止。这似乎是UI Elements的一个问题。

- &GT;调用相同方法时的不同行为

1 个答案:

答案 0 :(得分:0)

  

我的NoteActivity的onDestroy-Method告诉NoteManager调用mainActivity.datasetChanged()。记录方法调用,因此必须调用该方法。它在按下时工作,但在按下时不工作。在这两种情况下,我都会看到日志。

尝试将mainActivity.datasetChanged()改为onPause or onStop

更好的方法是使用startActivityForResult启动NoteActivity。

Android Documentation