【问题标题】:Android ArrayAdapter Crashes when I want to load listview当我想加载列表视图时,Android ArrayAdapter 崩溃
【发布时间】:2015-07-06 04:51:45
【问题描述】:

目标

我正在尝试在 Android 中创建购物清单。这有一个活动类(MainActivity.java)和一个布局(activity_main.xml) 这个程序有一个用于添加项目的编辑文本和一个用于购物清单项目的列表视图。

我使用 genymotion 来运行 mt 程序。当我运行这个程序时,它完全崩溃了。

结构

我的布局activity_main.xml 类:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText
        android:id="@+id/newItemText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/addItemHint"
        android:contentDescription="@string/addItemContentDescription"
        />

    <ListView
        android:id="@+id/shoppingListView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ListView>

</LinearLayout>

这是我的 MainActivity 类中的 OnCreate 方法

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Inflating the view
        setContentView(R.layout.activity_main);

        //References from the UI widgets
        ListView shoppingListView = (ListView) findViewById(R.id.shoppingListView);
        final EditText newShoppingItemText = (EditText) findViewById(R.id.newItemText);

        //the list of shopping items
        final ArrayList<String> shoppingListItems = new ArrayList<String>();
        shoppingListItems.add("Eggs");
        shoppingListItems.add("Bacon");
        //the array adapter, which binds the shopping list items array to the listview
        final ArrayAdapter<String> aa;
        aa = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_main,shoppingListItems);

        //Bind the adapter to the listview
        shoppingListView.setAdapter(aa);

        newShoppingItemText.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if(event.getAction() == KeyEvent.ACTION_DOWN)
                    if( (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || (keyCode == KeyEvent.KEYCODE_ENTER) ) {
                        shoppingListItems.add(0, newShoppingItemText.getText().toString());
                        aa.notifyDataSetChanged();
                        newShoppingItemText.setText("");
                        return true;
                    }
                        return false;
            }
        });
    }

问题

当我在 Genymotion 中运行此代码时,我的 logcat 中出现以下错误输出:

进程:com.example.jonas.shoppinglist,PID:8354 java.lang.IllegalStateException:ArrayAdapter 要求资源 ID 为 TextView 在 android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386) 在 android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 在 android.widget.AbsListView.obtainView(AbsListView.java:2255) 在 android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 在 android.widget.ListView.onMeasure(ListView.java:1175) 在 android.view.View.measure(View.java:16497)

【问题讨论】:

    标签: java android android-layout listview android-listview


    【解决方案1】:

    这行代码有问题

    aa = new ArrayAdapter<String>(MainActivity.this, R.layout.activity_main,shoppingListItems);
    

    您不能将您的活动布局作为列表视图中单个项目的布局传递。试试这个:

    aa = new ArrayAdapter&lt;String&gt;(MainActivity.this, android.R.layout.simple_list_item_1,shoppingListItems);

    【讨论】:

      【解决方案2】:

      此行不正确:

      aa = new ArrayAdapter&lt;String&gt;(MainActivity.this, R.layout.activity_main,shoppingListItems);

      你调用的构造函数是:

      http://developer.android.com/reference/android/widget/ArrayAdapter.html#ArrayAdapter%28android.content.Context,%20int,%20java.util.List%3CT%3E%29

      你正在向它传递活动布局,你应该向它传递列表中特定项目的布局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-01
        相关资源
        最近更新 更多