1

モバイルコンピューティングクラス用のシンプルなRSSフィードリーダーアプリケーションを作成しようとしています。RSSデータを管理および保持するためのクラスを作成しました。

@SuppressWarnings("unchecked")
    SimpleExpandableListAdapter rssItemList = new SimpleExpandableListAdapter(
            this,                       // context (this class)
            createTitleList(),          // Creating group List
            R.layout.parent_row,        // Group item layout XML
            new String[]{"titles"},     // the key of group item
            new int[]{R.id.itemTitle},  // ID of each group item.-Data under the key goes into this TextView
            createChildList(),          // childData describes second-level entries
            R.layout.child_row,         // Layout for sub-level entries(second level)
            new String[]{"desc"},       // Keys in childData maps to display
            new int[]{R.id.itemDesc}    // Data under the keys above go into these TextViews
    );
    setListAdapter(rssItemList);

私の問題はそれを表示することです。ExpandableListViewを使用しようとしていますが、リスト内のアイテムを展開しようとするとエラーが発生し続けます。

E/AndroidRuntime( 2542): FATAL EXCEPTION: main
E/AndroidRuntime( 2542): java.lang.ClassCastException: java.util.HashMap
E/AndroidRuntime( 2542):        at android.widget.SimpleExpandableListAdapter.getChildrenCount(SimpleExpandableListAdapter.java:255)
E/AndroidRuntime( 2542):        at android.widget.ExpandableListConnector.refreshExpGroupMetadataList(ExpandableListConnector.java:561)
E/AndroidRuntime( 2542):        at android.widget.ExpandableListConnector.expandGroup(ExpandableListConnector.java:682)
E/AndroidRuntime( 2542):        at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:567)
E/AndroidRuntime( 2542):        at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:527)
E/AndroidRuntime( 2542):        at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
E/AndroidRuntime( 2542):        at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 2542):        at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 2542):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 2542):        at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 2542):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 2542):        at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 2542):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 2542):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 2542):        at dalvik.system.NativeStart.main(Native Method)

グループリストマップと子リストマップを作成するためのコードがほぼ同じであるため、このエラーが発生する理由がわかりません。

@SuppressWarnings({ "unchecked", "rawtypes" })
private List createTitleList(){
    ArrayList itemTitles = new ArrayList();
    ArrayList<ItemData> entriesList = (ArrayList<ItemData>) feed.getMessages();

    for(int i = 0; i < entriesList.size(); i++){
        HashMap m = new HashMap();

        m.put("titles", entriesList.get(i).getTitle());

        itemTitles.add(m);
    }

    return itemTitles;
}

@SuppressWarnings({ "unchecked", "rawtypes" })
private List createChildList(){
    ArrayList itemDesc = new ArrayList(); // item description list
    ArrayList<ItemData> entriesList = (ArrayList<ItemData>) feed.getMessages();

    for(int i = 0; i < entriesList.size(); i++){
        HashMap<String, String> m = new HashMap<String, String>();

        m.put("desc", entriesList.get(i).getDescription());

        itemDesc.add(m);
    }

    return (List)itemDesc;
}

明確にするために、グループリストは表示されますが、子リストを表示するように展開されることはありません。

将来のグーガーのために、私は次のチュートリアルを使用しています。

Androidの拡張可能なListView

拡張可能なリスト

4

1 に答える 1

2

SimpleExpandableListAdapterのコードを見ると(これは使用したことがないので、ここでは間違っている可能性があります)、groupsフィールドは次のように宣言されています。

List<? extends Map<String, ?>> 

子供たちは

List<? extends List<? extends Map<String, ?>>>

つまり、子は、提供しているように見えるマップのリストではなく、マップのリストのリストである必要があります。

ジェネリック型に関する警告を抑制する行を取り除き、警告を非表示にするのではなく、実際に修正することをお勧めします。それらはこの種の失敗を防ぎます、そしてそれらが実際に避けられない状況はほとんどありません。

于 2012-04-12T17:22:02.870 に答える