1

我想創建一個子活動,它將在父活動對象上單擊打開。爲了更好地理解看到redbus應用的截圖:創建一個兒童活動從列表中選擇數據

enter image description here enter image description here enter image description here

在上輸入城市的第一屏幕用戶點擊(高亮紅色),然後進入到用戶通過與搜索有關城市選擇第二個屏幕城市的名字。然後點擊城市用戶後,返回到畫面1選擇的城市,也不會影響畫面的前一數據1.

我嘗試了一樣,你可以看到代碼:

UserDetails.java

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 

     case R.id.btnCancel: 
      CancelAll(); 
      break; 
     case R.id.defenceArea: 
      DefenceAreaSelection(); 
      break; 

     default: 
    } 
} 

private void DefenceAreaSelection() { 

    isSelection = true; 
    ArrayList<Integer> IdList = new ArrayList<>(); 
    for (int i=0;i<mDefenceAreaModel.size();i++){ 
     IdList.add(mDefenceAreaModel.get(i).getDefenseAreaID()); 
    } 
    Intent intent = new Intent(UserDetails.this, ListSelection.class); 
    intent.putExtra("names",mDefenceAreaNames); 
    intent.putExtra("ID",IdList); 

    //TODO send 2 array for id and names to ease the process 
    startActivityForResult(intent,requestCodeDefenceArea); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == requestCodeDefenceArea){ 
     Log.e("defe","got it"); 
    } 
} 

ListSelection.java

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_select_screen); 
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); 
    setSupportActionBar(myToolbar); 

    try { 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
     //Log.e("exception",e.getMessage()); 
    } 
    ArrayList<String> listNames = (ArrayList<String>) getIntent().getSerializableExtra("names"); 
    ArrayList<Integer> listId = (ArrayList<Integer>) getIntent().getSerializableExtra("ID"); 
    list = (ListView)findViewById(R.id.listNames); 

    ArrayAdapter adapter = new ArrayAdapter(ListSelection.this,android.R.layout.simple_dropdown_item_1line,listNames); 
    list.setAdapter(adapter); 

    //TODO onitem click set the result and go back to parent activity 
} 

但是我得到的問題是在選擇區域後返回到前一個屏幕,但屏幕1中的先前數據不再存在,這意味着除了活動結果之外,它還調用onCreate()方法。

回答

0

問題是你沒有保存視圖狀態!

如果您使用的是自定義視圖,則默認情況下不會保存其內容,特別是如果您覆蓋onSaveInstanceState()而不調用超級視圖。

有很多方法可以解決這個問題,最好是堅持在視圖中的內容,它的越多,你可以在這個StackOverflow answer

閱讀,但如果你想要去的簡單的方法,你可以簡單地在您的活動中將onSaveInstanceState()保存在一個Bundle中,並將以前的數據保存在onRestoreInstanceState()