简单的ListActivity崩溃

时间:2014-02-13 23:11:32

标签: android crash listactivity

[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>

这是strings.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>

3 个答案:

答案 0 :(得分:2)

注意:

使用ListActivity创建Listview时,两件事必须包含一个ListView,其android:id属性设置为@android:id / list(NOT android:id =“@ + id / list”)。

如果您将定义ListView并将android:id属性设置为@ + id / list,则会出错。

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

答案 1 :(得分:0)

看起来您正在尝试将数组资源加载到ArrayAdapter中。正在调用的构造函数期望textview的资源ID将字符串放入。

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

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

答案 2 :(得分:0)

此处的问题是因为您使用ListActivityListView但您使用的是自定义布局,因此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>

喂我回来