导航后活动UI没有退出
我有三个Activites:MainActivity(带有ListView),SettingsActivity和NoteActivity(用于显示注释)。 MainActivity启动SettingsActivity或NoteActivity。导航后活动UI没有退出
当我在设置或NoteActivity中按下(在手机的导航栏上)时,我会返回MainActivity并调用listadapter.notifyDataSetChanged()
。 Listview刷新,一切正常。 当我按下(Settings或NoteActivity的工具栏中的后退箭头)时调用相同的方法,但Listview不刷新。 这只发生在我向上导航时,而不是导航回时。
在MainActivity被设定为母体活性的清单:
<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>
另外像SwipeRefreshLayout其他UI元素向上导航之后不工作。我使用调试器来查看行为的差异,但在这两种情况下调用了相同的方法。
有没有人知道问题出在哪里?请告诉你是否需要更多代码。
//编辑:一些代码
我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法告诉NoteManager调用mainActivity.datasetChanged()
。该方法调用被记录下来,因此必须调用该方法。按下时不起作用,但按下时不起作用。在这两种情况下,我都看到日志。
相同的SwipeRefresh布局。 startSync
和syncFinished
- 方法被调用。但是加载动画并没有停止,但调用了srl.setRefreshing(false)
。这似乎是与UI元素的问题。
- >不同的行为调用同一个方法
我NoteActivity的的onDestroy法告诉NoteManager时要调用mainActivity.datasetChanged()。该方法调用被记录下来,因此必须调用该方法。按下时不起作用,但按下时不起作用。在这两种情况下,我都看到日志。
请尝试将mainActivity.datasetChanged()
代入onPause or onStop
。
更好的是用startActivityForResult
启动NoteActivity。
感谢您的答复(我不能upvote呢)。这并没有解决问题。我不认为这与调用方法的特定时间有关,例如。 SwipeRefreshLayout的加载动画从MainActivity调用,并且在MainActivity中停止('srl.setRefreshing(false)'),但是它不停止。只要我没有使用导航功能,它就会工作。 'notifyDataSetChanged()'相同。 – Alexander
我的猜测是,onDestroy在导航时不会被调用。你尝试过startActivityForResult吗? – Vacutainer
分享你的代码。 –
你已经调用了listadapter.notifyDataSetChanged() – Pavya
我已经添加了一些代码。 notifyDataSetChanged在另一个Activity被销毁时调用(onDestroy)。 – Alexander