2016-10-17 34 views
0

ActivityB - >服務類 - >填充的ListView在ActivityC(如下所示,並且沒有片段它)---> ActivityD如何在按下後退按鈕時恢復ListView並獲取List的內容?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
    setLocale(pref.getString("myLocale", null)); 

    setTitle(R.string.title_activity_choose_number); 
    setContentView(R.layout.activity_choose_number1); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    if(savedInstanceState != null) { 
     mobileNumbersList = savedInstanceState.getStringArrayList("mobileNumbers"); 
    } 
    mobileNumbersList = getIntent().getStringArrayListExtra("mobileNumbers"); 

    mobileNumberAdapter = new ArrayAdapter<String>(this, 
      R.layout.secnumsinglechoice, 
      mobileNumbersList); 

    numberListView = (ListView) findViewById(R.id.listViewNumberList); 
    numberListView.setAdapter(numberAdapter); 
    numberListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      String numberChosen = numberAdapter.getItem(position); 
      Intent passNumberIntent = new Intent(getBaseContext(), US.class). 
        putExtra(Intent.EXTRA_TEXT, numberChosen); 
      startActivity(passNumberIntent); 
     } 
    }); 
} 

現在,當返回按鈕被按下在ActivityD到ActivityC,我收到空指針錯誤。我知道原因,因爲這一次,我沒有通過ActivityD和ListView的意圖,適配器,數據都是空的。

所以當我搜索如何保存狀態,我遇到了saveInstanceState,onRestoreInstance和onSaveInstance。但我仍然無法解決這個問題。 ActivityC沒有片段。

+0

saveInstanceState意味着從後臺返回時恢復活動數據,其不相關,如果向前或向後導航,您的活動需要以前活動的數據,您應該將其存儲在類字段中,並在嘗試讀取意圖數據之前檢查它是否已設置。 – Nanoc

+0

/你的活動數據是什麼意思?這裏發生的問題是當我從ActivityD返回到ActivityC時,我失去了活動C數據。 類字段你的意思是像意圖???? – user3705478

+0

類字段是直接在您的類中聲明的變量,將您的ActivityC數據存儲在ActivityC中的字段中,以便您可以根據需要恢復它。 – Nanoc

回答

0

有兩件事情你應該做的:

  • 檢查getIntent()爲空或不是。如果它不爲空,嘗試從它
  • 將數據獲得的數據爲savedInstanceState變量的方法public void onSaveInstanceState(Bundle savedInstanceState)
+0

我試着把數據放入使用onSaveInstanceState的savedInstanceState中,但那不起作用。 – user3705478

+0

你能展示你的活動C的更多細節嗎?也許,當你從活動D - >活動C導回時,活動C跳轉到onResume(),因爲它尚未被銷燬。嘗試在logcat中檢查您的活動生命週期以查看它。 – MobileTuts

相關問題