Android ListView-setOnItemClickListener不工作

Android ListView-setOnItemClickListener不工作,android,listview,Android,Listview,我正在尝试使用自定义适配器实现listview。问题在于,每当触发McClickListener事件时,它就会崩溃 java.lang.ClassCastException:imp.translator.diana.lang.CardItemData 无法转换为java.lang.String 在imp.translator.diana.lang.Speak$1.onItemClick(Speak.java:41) 在android.widget.AdapterView.performItemC

我正在尝试使用自定义适配器实现listview。问题在于,每当触发McClickListener事件时,它就会崩溃

java.lang.ClassCastException:imp.translator.diana.lang.CardItemData 无法转换为java.lang.String 在imp.translator.diana.lang.Speak$1.onItemClick(Speak.java:41) 在android.widget.AdapterView.performItemClick

这是我的班级:

    final ListView list = (ListView) findViewById(R.id.list_view);

    list.addHeaderView(new View(this));
    list.addFooterView(new View(this));

    BaseInflaterAdapter<CardItemData> adapter = new BaseInflaterAdapter<CardItemData>(new CardInflater());

    CardItemData data = new CardItemData("Translate");
    adapter.addItem(data, false);
    CardItemData data2 = new CardItemData("Voice to Text");
    adapter.addItem(data2, false);
    CardItemData data3 = new CardItemData("Record");
    adapter.addItem(data3, false);
    CardItemData data4 = new CardItemData("Info");
    adapter.addItem(data4, false);

    list.setAdapter(adapter);

    list.setClickable(true);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView myAdapter, View myView, int position, long mylng) {
            String selectedFromList = (String) (myAdapter.getItemAtPosition(position));
        }
    });
你知道这里可能出了什么问题吗

你知道这里可能出了什么问题吗

您的
getItem
正在返回
T
,在您的情况下,它是
CardItemData
的一个实例,但这里:

 String selectedFromList = (String) (myAdapter.getItemAtPosition(position));
您正在将其强制转换为
字符串
。您可能希望将其强制转换为
CardItemData
。顺便说一句,Java支持协变返回类型,因此您应该能够使用

@Override
public T getItem(int pos) {
    return m_items.get(pos);
}
java.lang.ClassCastException:imp.translator.diana.lang.CardItemData 无法转换为java.lang.String

上述例外情况是由于
String selectedFromList=(String)(myAdapter.getItemAtPosition(position))在这里,您可以尝试将
CardItemData
转换为
String

试试这个:

 list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView myAdapter, View myView, int position, long mylng) {
                CardItemData selectedFromList = (CardItemData) (myAdapter.getItemAtPosition(position)); 
                String pos = selectedFromList.getText1();
            }
        });

这是一个类型转换问题,您正在将“CardItemData”类型转换为“String”

字符串selectedFromList=(字符串)(myAdapter.getItemAtPosition(位置))

使用“getItem”方法获取单击的“CardItemData”项

检查下面给出的链接

它不是这样工作的,它说“无法解析符号”;将其更改为此CardItemData selectedFromList=(CardItemData)(myAdapter.getItemAtPosition(position));String pos=selectedFromList.getText1();现在它可以工作了。谢谢你的回答!
@Override
public T getItem(int pos) {
    return m_items.get(pos);
}
 list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView myAdapter, View myView, int position, long mylng) {
                CardItemData selectedFromList = (CardItemData) (myAdapter.getItemAtPosition(position)); 
                String pos = selectedFromList.getText1();
            }
        });