Hashmap Adapter不喜欢用于显示的Textview强制转换

时间:2015-05-25 18:01:50

标签: android hashmap android-arrayadapter

所以我制作了一个带有HashMap(String,Card)的ArrayAdapter,其中Card只是两个字符串的自定义类,基本上可以在以后的ListView上显示信息 所以我重写了getView方法,如:

Alter table mytable add mycolumn char(1) not null default('N');

我得错误卡无法转换为java.lang.CharSequence

是否有更好的方式来显示信息而不仅仅是将其作为文本视图投射?

谢谢!

以下是my_adapter_item

的XML代码
public View getView(int position, View changeView, ViewGroup parent)
{
    final View result;
    if(changeView == null)
    {
        result = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_adapter_item, parent,false);
    }
    else
        result = changeView;
    Map.Entry<String, String> item = getItem(position);

    //replace findViewById by ViewHolder
     ((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey());
Error here--> ((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());
    return result;
}

这也是日志猫

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView 
    android:id = "@android:id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
<TextView 
    android:id = "@android:id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

1 个答案:

答案 0 :(得分:1)

您的<String, Card>类型为getValue(),因此您不能简单地将CharSequence的返回值转换为getValue(),但您必须指定返回值Cardpublic String mValue类型的对象,然后访问属性。假设该卡包含mValue,您可以通过cardInstance.mValue访问public View getView(int position, View changeView, ViewGroup parent) { final View result; if(changeView == null) { result = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_adapter_item, parent,false); } else result = changeView; Map.Entry<String, Card> item = getItem(position); Card card = item.getValue(); ((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey()); ((TextView) result.findViewById(android.R.id.text2)).setText(card.mValue); return result; } 。 E.g。

{{1}}