Android-调用finish()方法会先调用onPause(),然后在onStop/Destroy之前调用SimpleAdapter的getView()方法,导致崩溃
创始人
2024-08-19 18:00:03
0

这个问题通常发生在使用SimpleAdapter时,因为当调用finish()方法时会触发ListView重新绘制,在这个过程中,SimpleAdapter的getView()方法可能会在onStop或onDestroy之前被调用,导致崩溃。

一种解决方法是在调用finish()方法之前,先调用ListView的setAdapter(null)方法,以清除Adapter并防止调用getView()方法。示例代码如下:

ListView listView = findViewById(R.id.list_view);
listView.setAdapter(null);
finish();

还有一种解决方法是继承SimpleAdapter并覆盖其getView()方法,在方法中添加必要的检查以避免崩溃。示例代码如下:

public class MyAdapter extends SimpleAdapter {
    public MyAdapter(Context context, List> data, int resource, String[] from, int[] to) {
        super(context, data, resource, from, to);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        try {
            return super.getView(position, convertView, parent);
        } catch (IllegalStateException e) {
            // Ignore this exception
            return new View(getContext());
        }
    }
}

使用这个自定义Adapter时,需要将SimpleAdapter替换为MyAdapter,如下所示:

ListView listView = findViewById(R.id.list_view);
MyAdapter adapter = new MyAdapter(this, data, R.layout.item_layout, from, to);
listView.setAdapter(adapter);

这样,在调用finish()方法之后,SimpleAdapter的getView()方法就不会再被调用了,也就避免了崩溃。

相关内容

热门资讯

五分钟安卓版本!wePoKe辅... 五分钟安卓版本!wePoKe辅助挂(透视)德州ai智能辅助(总是真的有挂)1、德州aiai机器人多个...
九分钟苹果版!we辅助poke... 九分钟苹果版!we辅助poker辅助挂(透视)AA POKER下载软件(果然真的有挂)1、这是跨平台...
6分钟有挂!wpK辅助挂(透视... 6分钟有挂!wpK辅助挂(透视)德扑之星开桌可以设置(其实真的有挂);人气非常高,ai更新快且高清可...
九分钟口控制!wepoker辅... 九分钟口控制!wepoker辅助挂(透视)云扑克辅助器苹果(一贯真的有挂);无聊就玩这款wepoke...
轻量版八分钟!wepoke有挂... 轻量版八分钟!wepoke有挂网上德州微扑克辅助(其实真的有挂)-知乎1、用户打开应用后不用登录就可...
挂一分钟!来玩德州app服务器... 挂一分钟!来玩德州app服务器在哪里德州aa辅助(果真真的有挂)-今日头条小薇(透视辅助)致您一封信...
插件1分钟!wpk ai是有w... 插件1分钟!wpk ai是有wopoker德州真的有挂(的确真的有挂)-哔哩哔哩1、完成wopoke...
安卓版本6分钟!轰趴大菠萝十三... 安卓版本6分钟!轰趴大菠萝十三水辅助德州ai智能辅助(果然真的有挂)-知乎1、轰趴大菠萝十三水辅助系...
ai辅助五分钟!微扑克的辅助工... 您好,云扑克是否有外挂这款游戏可以开挂的,确实是有挂的,需要了解加微【487309276】很多玩家在...
新版八分钟!aapoker辅助... 新版八分钟!aapoker辅助工具wpk俱乐部有外挂(好像真的有挂)-小红书1、下载好wpk俱乐部有...