ArrayList删除操作致ListPhoneBook Activity重启问题求助
执行ArrayList.remove后Activity意外重启的问题
我正在开发一个简易CRUD电话簿应用,ListPhoneBook Activity持有自定义对象的ArrayList,通过RecyclerView Adapter跳转至详情页(未使用startActivityForResults)。详情页展示对象信息并提供“删除”按钮,点击后返回ListPhoneBook并传入调用方名称与项位置。
由于ListPhoneBook可从多个Activity(如MainActivity)启动,我使用switch-case结构处理不同调用场景。当在case "DetailsDelete"中执行myContactList.remove(itemPosition)时,该Activity的onCreate方法会立即以callingActivity=MainActivity重启;移除该remove方法则流程正常。
应用运行流程
- 正常路径:MainActivity → ListPhoneBook Activity → 详情页 → 返回ListPhoneBook Activity
日志对比
含remove操作时日志:
AAA: callingActivity = MainActivity BBB: callingActivity = DetailsDelete AAA: callingActivity = MainActivity
无remove操作时日志:
AAA: callingActivity = MainActivity BBB: callingActivity = DetailsDelete CCC: callingActivity = DetailsDelete
请问为何执行remove命令后Activity会立即重启?
相关代码
public class ListPhoneBook extends AppCompatActivity { private String callingActivity; private ContactModel currentRow; private int itemPosition; SharedPreferences preferences; private ArrayList<ModelloContatto> myContactList; private mioAdapterRubrica adapterRubrica; private ContactModel rigaAppoggio; //elemente grafici private EditText etLisRubInNome, etLisRubImNote; private ImageButton ibLisRubCambiaNome, ibLisRubCambiaNote; private RecyclerView rvListaPrefRecycler; private BottomNavigationView nvListaRubBottomMenu; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lista_rubrica); callingActivity = getIntent().getStringExtra("callingActivity"); Log.d("Log","AAA: callingActivity = " + callingActivity); initialization(); switch (callingActivity) { case "MainActivity": case "Detail": readPreferences(); break; case "DetailsDelete": Log.d("Log","BBB: callingActivity = " + callingActivity); itemPosition = getIntent().getIntExtra("itemPosition",-1); myContactList.remove(itemPosition); Log.d("Log","CCC: callingActivity = " + callingActivity); break; } showData(); } private void initialization() { etLisRubInNome = findViewById(R.id.etLisRubInNome); etLisRubImNote = findViewById(R.id.etLisRubImNote); ibLisRubCambiaNome = findViewById(R.id.ibLisRubCambiaNome); ibLisRubCambiaNote = findViewById(R.id.ibLisRubCambiaNote); rvListaPrefRecycler = findViewById(R.id.rvListaPrefRecycler); nvListaRubBottomMenu = findViewById(R.id.nvListaRubBottomMenu); nvListaRubBottomMenu.setItemIconTintList(null); myContactList = new ArrayList<>(); } private void readPreferences() { myContactList.add(new ModelloContatto("AAAAAA","123456", "aaaaa")); myContactList.add(new ModelloContatto("BBBBB","999999", "bbbbb")); myContactList.add(new ModelloContatto("CCCCC","88888", "ccccc")); myContactList.add(new ModelloContatto("DDDDD","77777", "ddddd")); myContactList.add(new ModelloContatto("EEEEE","666666", "eeeee")); } private void showData() { Collections.sort(myContactList); final LinearLayoutManager mioLLM = new LinearLayoutManager(this); rvListaPrefRecycler.setLayoutManager(mioLLM); adapterRubrica = new mioAdapterRubrica(myContactList, this); rvListaPrefRecycler.setAdapter(adapterRubrica); rvListaPrefRecycler.setHasFixedSize(true); } }
内容的提问来源于stack exchange,提问作者linuxp
相关产品推荐
相关产品推荐

