简单列表活动崩溃



[edit] logcat here: https://app.box.com/s/08yuzv8hq4bgt7qpemy0

这是我正在做的这个非常简单的培训应用程序,该应用程序在启动时不断崩溃:

package com.example.myown;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, R.array.arraye);
      setListAdapter(adapter);
      ListView lv = getListView();

}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
}

你能看出任何原因会发生这种情况吗?一旦我打开应用程序,它就会崩溃 - 活动出现时没有列表视图,然后我得到通常的"MyOwn 已停止"。

这是activity_mail.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:paddingBottom="@dimen/activity_vertical_margin"
  android:paddingLeft="@dimen/activity_horizontal_margin"
  android:paddingRight="@dimen/activity_horizontal_margin"
  android:paddingTop="@dimen/activity_vertical_margin"
  tools:context=".MainActivity" >

  <TextView
      android:id="@+id/view"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
   />

</RelativeLayout>

以下是字符串.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyOwn</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string-array name="arraye">
    <item>one</item>
    <item>two</item>
    <item>three</item>
    <item>four</item>
</string-array>
</resources>

注意:

使用 ListActivity 创建 Listview 时,您必须注意两件事,带有 android:id 属性的列表视图应设置为 @android:id/list(不是 android:id="@+id/list")。

如果您使用 android:id 属性定义了 ListView,并将其设置为 @+id/list,那么它将给出错误。

 

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

看起来您正在尝试将数组资源加载到 ArrayAdapter 中。正在调用的构造函数需要文本视图的资源 ID 来放置字符串。

相反,您应该从资源中加载数组并将其放入适配器中,如下所示:

String[] items = getResources().getStringArray(R.array.arraye);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, items);

这里的问题,因为您使用ListActivity它有其ListView但您使用的是自定义布局,因此Activity将读取布局并尝试查找其ListView但您没有将其包含在布局中,因此您需要像这样添加其ListView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
    android:id="@+id/view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</RelativeLayout>

这里是Activity代码:

public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    String [] array = getApplicationContext().getResources().getStringArray(R.array.arraye);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(List_Activity.this, android.R.layout.simple_list_item_1, array);
      setListAdapter(adapter);
      ListView lv = getListView();
}

我把数组字符串放在资源中:

 <string-array name="arraye">
    <item>item1</item>
    <item>item1</item>
    <item>item1</item>
</string-array>

喂我回去

最新更新