2016-01-22 83 views
0

我有三個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佈局。 startSyncsyncFinished - 方法被調用。但是加載動畫並沒有停止,但調用了srl.setRefreshing(false)。這似乎是與UI元素的問題。

- >不同的行爲調用同一個方法

+0

分享你的代碼。 –

+0

你已經調用了listadapter.notifyDataSetChanged() – Pavya

+0

我已經添加了一些代碼。 notifyDataSetChanged在另一個Activity被銷燬時調用(onDestroy)。 – Alexander

回答

0

我NoteActivity的的onDestroy法告訴NoteManager時要調用mainActivity.datasetChanged()。該方法調用被記錄下來,因此必須調用該方法。按下時不起作用,但按下時不起作用。在這兩種情況下,我都看到日誌。

請嘗試將mainActivity.datasetChanged()代入onPause or onStop

更好的是用startActivityForResult啓動NoteActivity。

Android Documentation

+0

感謝您的答覆(我不能upvote呢)。這並沒有解決問題。我不認爲這與調用方法的特定時間有關,例如。 SwipeRefreshLayout的加載動畫從MainActivity調用,並且在MainActivity中停止('srl.setRefreshing(false)'),但是它不停止。只要我沒有使用導航功能,它就會工作。 'notifyDataSetChanged()'相同。 – Alexander

+0

我的猜測是,onDestroy在導航時不會被調用。你嘗試過startActivityForResult嗎? – Vacutainer