我有三個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元素的問題。
- >不同的行爲調用同一個方法
分享你的代碼。 –
你已經調用了listadapter.notifyDataSetChanged() – Pavya
我已經添加了一些代碼。 notifyDataSetChanged在另一個Activity被銷燬時調用(onDestroy)。 – Alexander