Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不能将androidx.appcompat.widget.AppCompatTextView转换为android.widget.CheckedTextView

不能将androidx.appcompat.widget.AppCompatTextView转换为android.widget.CheckedTextView
EN

Stack Overflow用户
提问于 2020-04-06 21:07:00
回答 1查看 953关注 0票数 0

我是Java中的android应用程序的新手。示例应用程序应该让我选择我想要在ListView中使用的货币。每次我想从列表中选择一种货币时,应用程序崩溃,我得到错误:

代码语言:javascript
运行
AI代码解释
复制
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.a5_listview, PID: 12333
    java.lang.ClassCastException: androidx.appcompat.widget.AppCompatTextView cannot be cast to android.widget.CheckedTextView
        at com.example.a5_listview.MainActivity$1.onItemClick(MainActivity.java:48)

MainActivity.java

代码语言:javascript
运行
AI代码解释
复制
package com.example.a5_listview;

import androidx.appcompat.app.AppCompatActivity;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckedTextView;
import android.widget.ListView;
import android.widget.Toast;

import com.google.gson.Gson;

import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

    List<nbpCurrency> currencies = new ArrayList<>();
    ListView listView;
    Context context;
    ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = findViewById(R.id.listView);
        context = this;

        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckedTextView v = (CheckedTextView) view;
                boolean isCurrentChoice = v.isChecked();
                nbpCurrency currency = (nbpCurrency) listView.getItemAtPosition(position);
                currency.setChosen(isCurrentChoice);
            }
        });
        
        getCurrencies();
    }

    private void getCurrencies() {
        progressDialog = ProgressDialog.show(context, "Getting currencies",
                "Please wait...", true);

        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    URL nbpEndpoint =
                            new URL("http://api.nbp.pl/api/exchangerates/tables/a/");
                    HttpURLConnection nbpConnection =
                            (HttpURLConnection) nbpEndpoint.openConnection();
                    nbpConnection.setRequestProperty("Accept", "application/json");

                    if(nbpConnection.getResponseCode() == 200) {
                        InputStreamReader is =
                                new InputStreamReader(nbpConnection.getInputStream());
                        Gson gson = new Gson();
                        final nbpCurrencies[] nbpCurrenciesArray = gson.fromJson(is, nbpCurrencies[].class);
                        nbpConnection.disconnect();

                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                currencies.addAll(Arrays.asList(nbpCurrenciesArray[0].getCurrencies()));
                                Collections.sort(currencies);
                                ArrayAdapter<nbpCurrency> arrayAdapter =
                                        new ArrayAdapter<nbpCurrency>(context,
                                                android.R.layout.simple_list_item_1, currencies);
                                listView.setAdapter(arrayAdapter);
                                selectChosen();
                                progressDialog.dismiss();
                            }
                        });
                    } else {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                progressDialog.dismiss();
                                Toast.makeText(context, "There was a problem getting the data",
                                        Toast.LENGTH_LONG).show();
                            }
                        });
                    }
                } catch(Exception e) {
                    e.printStackTrace();

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            progressDialog.dismiss();
                            Toast.makeText(context, "There was a problem getting the data",
                                    Toast.LENGTH_LONG).show();
                        }
                    });
                }
            }
        });
    }

    private void selectChosen() {
        SharedPreferences pref =
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        Set<String> chosenCurrenciesCodes = pref.getStringSet("currenciesCodes", new HashSet<String>());

        for(int i = 0; i < currencies.size(); i++) {
            nbpCurrency currency = currencies.get(i);
            if(chosenCurrenciesCodes.contains(currency.getCode())) {
                currency.setChosen(true);
                listView.setItemChecked(i, true);
            }
        }
    }

    public void saveChosen(View view) {
        SharedPreferences pref =
                PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
        Set<String> chosenCurrenciesCodes = new HashSet<>();

        for(nbpCurrency currency : currencies) {
            if(currency.isChosen()) {
                chosenCurrenciesCodes.add(currency.getCode());
            }
        }

        pref.edit().putStringSet("currenciesCodes", chosenCurrenciesCodes).apply();
    }
}

activity_main.xml

代码语言:javascript
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="8dp"
        app:layout_constraintBottom_toTopOf="@+id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </ListView>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:onClick="saveChosen"
        android:text="Save"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

nbpCurrencies.java

代码语言:javascript
运行
AI代码解释
复制
package com.example.a5_listview;

import com.google.gson.annotations.SerializedName;

public class nbpCurrencies {
    private String table;
    private String no;
    private String effectiveDate;

    @SerializedName(value = "rates")
    private nbpCurrency[] currencies;

    public String getTable() {
        return table;
    }

    public void setTable(String table) {
        this.table = table;
    }

    public String getNo() {
        return no;
    }

    public void setNo(String no) {
        this.no = no;
    }

    public String getEffectiveDate() {
        return effectiveDate;
    }

    public void setEffectiveDate(String effectiveDate) {
        this.effectiveDate = effectiveDate;
    }

    public nbpCurrency[] getCurrencies() {
        return currencies;
    }

    public void setCurrencies(nbpCurrency[] currencies) {
        this.currencies = currencies;
    }
}

nbpCurrency.java

代码语言:javascript
运行
AI代码解释
复制
package com.example.a5_listview;

class nbpCurrency implements Comparable<nbpCurrency> {
    private String currency;
    private String code;
    private double mid;

    private transient boolean chosen = false;

    public nbpCurrency() {
    }

    public String getCurrency() {
        return currency;
    }

    public void setCurrency(String currency) {
        this.currency = currency;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public double getMid() {
        return mid;
    }

    public void setMid(double mid) {
        this.mid = mid;
    }

    public boolean isChosen() {
        return chosen;
    }

    public void setChosen(boolean chosen) {
        this.chosen = chosen;
    }

    @Override
    public String toString() {
        return String.format("%s [%s: %.3f]", code, currency, mid);
    }

    @Override
    public int compareTo(nbpCurrency nbpCurrency) {
        return code.compareTo(nbpCurrency.getCode());
    }
}

在日志中,我可以看到导致所有混乱的代码行:CheckedTextView v = (CheckedTextView) view;

该错误的原因是什么?我已经在StackOverflow上查看了其他答案,但我仍然找不到任何解决方案。也许我只是看不到一个明显的错误。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 21:23:11

代码语言:javascript
运行
AI代码解释
复制
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                CheckedTextView v = (CheckedTextView) view;
                boolean isCurrentChoice = v.isChecked();
                nbpCurrency currency = (nbpCurrency) listView.getItemAtPosition(position);
                currency.setChosen(isCurrentChoice);
            }
        });

您可以在这里设置一个ClickListener。适配器返回的view字段为TextView。这就是你获得CastException的方式。在这个方法中,您还可以获得idposition字段,并且可以使用它们。

如果您希望启用多项选择,则需要使用如下所示的另一个布局构建ArrayAdapter

代码语言:javascript
运行
AI代码解释
复制
ArrayAdapter<nbpCurrency> arrayAdapter =
    new ArrayAdapter<nbpCurrency>(context,
        android.R.layout.simple_list_item_multiple_choice, currencies);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61068990

复制
相关文章
深度数据恢复神器,我删我删我删删删~
昨天休息了一天,有件事要和大家说下的,微信不知道为什么屏蔽了蓝奏云盘的链接,在微信里面直接打不开,我之前很多资源都是放在蓝奏云盘的。
IT小侠公社
2019/06/12
1.1K0
深度数据恢复神器,我删我删我删删删~
ls 不显示,rm 删不掉,怎么办?
有个叫atest的东西 ls -l atest 查不出来是什么 下面删也删不掉 但是可以用mv改名字,它放在/目录下,用ls /导致不能显示 如果操作,请大侠指点, 顺便问下什么时候会导致ls /   不显示,谢谢! # s
三杯水Plus
2018/11/14
1K0
漫画大数据:为啥我把 HDFS 文件权限都改成 777 了还是删不掉?
小伙伴们大家好 $ HADOOP_USER_NAME=hdfs hadoop fs -ls /test Found 1 items -rwxrwxrwx 3 hdfs supergroup 3 2022-12-15 22:17 /test/b.txt 第一组 rwx 表示文件的 Owner 也就是 hdfs 用户有读写权限 第二组 rwx 表示文件所属组 也就是 supergroup 组内的用户有读写权限 第三组 rwx 表示其他用户有读写权限。 但对于 HDFS 上的文件而言
DataChat
2023/01/11
8940
漫画大数据:为啥我把 HDFS 文件权限都改成 777 了还是删不掉?
java删除文件时总是返回false,删不掉「建议收藏」
我的文件都是存在的,但是就是经常性的删不了,不知道怎么回事,我单独测试的时候是可以的,感觉很是奇怪,上网查,人家说是可能的情况有:
全栈程序员站长
2022/06/27
1.7K0
临近五一,小林我删删删删库了,要跑路吗?
写个简单的 Bash 脚本都不上心了,写完连检查都不检查,直接拖到到实体服务器跑。
小林coding
2020/05/18
2.8K0
临近五一,小林我删删删删库了,要跑路吗?
打开控制台也删不掉的元素,前端都吓尿了
运行完我的代码了,又切回element板块,想删掉它(谁叫你那么大坨的,被我盯上了)。点一下选中这个div,然后按一下删除
lhyt
2020/05/26
1.4K0
打开控制台也删不掉的元素,前端都吓尿了
Java删除文件时总是返回false,删不掉,且无异常
今天在利用 File 类中的 delete() 方法删除文件时总是返回 false 。查看路径文件路径正确,文件也存在。测试可以正常,唯独在项目中那是一个删不掉啊。后来与测试用例仔细比对了一下,发现有个 IO 类在使用,因此得出:在删除文件是因为没关闭 IO,导致文件无法删除,后来加上 close() 就可以删除文件了。
全栈程序员站长
2022/08/27
1.6K0
centos服务器主网卡及添加辅助网卡绑定多IP实践演示
创建主网卡及辅助网卡的多IP 在控制台创建即可 参见:https://cloud.tencent.com/developer/article/1360461
芷兰云
2018/12/03
4K0
我删库跑路失败了
据说,此命令一旦执行成功,就会给人带来快乐,是一个善良的好命令,所以我喜欢叫它 快乐命令 。
程序员鱼皮
2021/07/08
1.1K0
抱歉,我也不想删库
试想一下,作为程序员因为个人操作问题,导致众多用户手机数据被删,会是什么感受? 反正小E光是想想就觉得窒息。 然而最近,令人窒息的事情真的发生了。 安卓搞机圈有名的第三方框架:EDXposed 的开发者,因为配置上的疏忽。 把别人恶意提交在最大同性交友网站GitHub上的恶意代码“rm -rf”(可以对数据进行彻底抹除),推送给了用户。 最后导致众多用户手机数据丢失,并且无法复原。 或许有人会疑惑,为什么EdXposed的开发者会犯下这种疏忽? 这就不得不说到程序猿开发时的尚方宝剑:良好的开发
腾讯NEXT学位
2020/05/28
4390
我TM被人删库了
按我的习惯总会先跑个demo演示下,本想打开Navicat建个表 ,额~ ,几天没打开这是什么局面?
程序员小富
2021/04/22
8430
删库不要跑,我站起来还可以删
原文地址: https://copyfuture.com/blogs-details/201909061555306597xvo4pefwz7sy68
谙忆
2021/01/21
2560
都别拦着我,我要删库了
一个流传甚广的命令,删库命令,自毁命令说的都是他,常年霸占Linux最危险命令排行榜第一名。关于它的故事有很多
震八方紫面昆仑侠
2020/10/26
1.8K0
都别拦着我,我要删库了
我的BERT!改改字典,让BERT安全提速不掉分(已开源)
当前,大部分中文预训练模型都是以字为基本单位的,也就是说中文语句会被拆分为一个个字。中文也有一些多粒度的语言模型,比如创新工场的ZEN和字节跳动的AMBERT,但这类模型的基本单位还是字,只不过想办法融合了词信息。目前以词为单位的中文预训练模型很少,据笔者所了解到就只有腾讯UER开源了一个以词为颗粒度的BERT模型,但实测效果并不好。
AI科技评论
2020/10/09
1.2K0
我的BERT!改改字典,让BERT安全提速不掉分(已开源)
记录我删库没跑路的处理方式
就在今天刚过中午,部门经理让我处理一下一个部署项目的solr索引与实际数据不符合的问题,我们的系统在主页面用了solr进行加载,在数据库中有两篇文章是已经删除了的,而在系统主页还在展示,之前我处理过好几次这种问题,于是我轻车熟路的去检查了一遍数据库和solr的差异数据,随后到服务器上将主系统重新启动(公司内部系统)按照系统业务,在系统启动后应该更新索引,在启动完成后我检查页面发现还存在那两篇文章(现在它俩还不让我那么激动)于是我重启了solr服务再检查一遍,发现还有真是顽固不堪,我只能使出我的必杀技了:删索引,正是这一步导致了我半个下午的暴躁。
余生大大
2022/11/02
3850
记录我删库没跑路的处理方式
32 | kill不掉的语句
其实大多数情况下,kill query/connection 命令是有效的。比如,执行一个查询的过程中,发现执行时间太久,要放弃继续查询,这时我们就可以用 kill query 命令,终止这条查询语句。
HaC
2020/12/30
1.5K0
32 | kill不掉的语句
kill不掉的僵尸进程~
对于我们开发人员来说有问题要先解决了再说,怎么杀死僵尸进程呢。 1、ps -aux,看看哪个进程STAT为Z,哪个就是僵尸进程
名字是乱打的
2021/12/24
2.8K0
kill不掉的僵尸进程~
Windows服务器添加辅助网卡及绑定多ip实践演示
以Windows server 2012为例 centos7服务器主网卡绑定多ip实践演示: https://cloud.tencent.com/developer/article/1360461 centos7服务器添加辅助网卡绑定多ip实践演示: https://cloud.tencent.com/developer/article/1360462 Windows服务器主网卡绑定多ip实践演示: https://cloud.tencent.com/developer
醉生萌死
2018/11/04
5.9K0
Windows服务器添加辅助网卡及绑定多ip实践演示
此文24小时内,我必删!!
物以类聚,人以群分。 赚钱最简单的逻辑,就是跟着有结果的人,做有结果的事。 今天推荐几个靠谱优质的副业大佬号主,他们有实力、有温度、有质量,值得拥有! 建议先全部关注,再领取副业项目!! 1 财神菲 2022做什么线上项目最赚钱? 推荐一位大佬——财神菲,三年咸鱼资深玩家,单品年销售额1亿+,国内首创闲鱼数码流量电商模式,简单复制3-7天出单赚钱,学员几乎100%赚钱,新手月赚几万很简单。 私聊他,送你一份咸鱼电商学习资料,在家也能干,前10名免费,先到先得。 ▲长按上方卡片识别关注 2 徐言
纯洁的微笑
2022/05/25
6710
此文24小时内,我必删!!
推荐三款我常备开发辅助神器
五一假期过完了,大家都去哪些地方浪了?上班第一天是不是倍感无趣?哈哈,不要紧,今天我来给大家推荐几个神器,让你明天神清气爽,这可是程序员开发必备之良品呀。
大愚
2019/01/08
5200

相似问题

COS 文件内容删除不掉,大佬们都是怎么删的?打钩的删除就是个摆设吗?

2444

好友申请删除删不了库里?

1261

FTP里面的文件删不了?

3843

人脸识别删除人员有全删的接口吗?

1192
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档