代码之家  ›  专栏  ›  技术社区  ›  Corey D

在包含文本和图像的列表视图中使用MatrixCursor和SimpleCursorAdapter

  •  21
  • Corey D  · 技术社区  · 16 年前

    我在使用计算机时遇到问题 MatrixCursor 填充我的 ListView :

    private void fillData() {
        String[] menuCols = new String[] { "icon", "item", "price" };
        int[] to = new int[] { R.id.icon, R.id.item, R.id.price };
    
        MatrixCursor menuCursor = new MatrixCursor(menuCols);
        startManagingCursor(menuCursor);
    
        menuCursor.addRow(new Object[] { R.drawable.chicken_sandwich, "Chicken Sandwich", "$3.99" });
    
        SimpleCursorAdapter menuItems = new SimpleCursorAdapter(
                this, R.layout.menu_row, menuCursor, menuCols, to);
    
        setListAdapter(menuItems);
    }
    

    构建 SimpleCursorAdapter 导致崩溃。即使当我尝试删除图标时,应用程序仍然崩溃。这是我的 menu_row.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        xmlns:android="http://schemas.android.com/apk/res/android">
        <ImageView 
            android:id="@+id/icon"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </ImageView>
        <TextView 
            android:id="@+id/item" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </TextView>
        <TextView 
            android:id="@+id/price" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content">
        </TextView>
    </LinearLayout>
    

    以下是崩溃时的调用堆栈:

    Thread [<3> main] (Suspended (exception RuntimeException))  
        ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2481  
        ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2497   
        ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119 
        ActivityThread$H.handleMessage(Message) line: 1848  
        ActivityThread$H(Handler).dispatchMessage(Message) line: 99 
        Looper.loop() line: 123 
        ActivityThread.main(String[]) line: 4338    
        Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
        Method.invoke(Object, Object...) line: 521  
        ZygoteInit$MethodAndArgsCaller.run() line: 860  
        ZygoteInit.main(String[]) line: 618 
        NativeStart.main(String[]) line: not available [native method]  
    

    解决方案:

    我发现了问题,解决方法在下面的答案中。

    1 回复  |  直到 13 年前
        1
  •  20
  •   Corey D    16 年前

    让我们把这归咎于缺乏使用Eclipse调试Java的经验。

    在调试器中运行应用程序时,我因RuntimeException崩溃。单击调用堆栈中最顶层的元素,我看到了变量列表,在该列表中我看到了异常e。

    特定错误是无效的参数,因为我的MatrixCursor没有_id列。添加一个标记为_id的列修复了问题,现在一切正常。

    感谢您让我再次查看调试器!熟悉并熟悉您的工具!

    推荐文章