You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:35:23