2012-03-20 71 views
0

我有麻煩創建一個簡單的列表(一些可擴展列表已經工作)。當我做setListAdapter()時,該應用程序崩潰。我的錯誤在哪裏?ListActivity,ListView和ListAdapter崩潰Android應用程序

Acivity:

public class UserListActivity extends ListActivity { 

    UserListAdapter mAdapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.userlist); 
     mAdapter = new UserListAdapter(this); 
     setListAdapter(mAdapter); 
     registerForContextMenu(getListView()); 
    } 
} 

適配器:

public class UserListAdapter implements ListAdapter { 

    private Context context; 
    private List<UserItem> users; 

    public UserListAdapter(Context c) { 

     context = c; 
     users = new Database(context).getAllUsers(); // this class is working properly 
    } 

    public int getCount() { 

     return users.size(); 
    } 

    public Object getItem(int pos) { 

     return users.get(pos).getSimplified(); 
    } 

    public long getItemId(int pos) { 

     return users.get(pos).getId(); 
    } 

    public int getItemViewType(int arg0) { 

     return 0; 
    } 

    public View getView(int arg0, View arg1, ViewGroup arg2) { 

     return null; 
    } 

    public int getViewTypeCount() { 

     return 0; 
    } 

    public boolean hasStableIds() { 

     return true; 
    } 

    public boolean isEmpty() { 

     return users.size() == 0; 
    } 

    public void registerDataSetObserver(DataSetObserver arg0) { 

    } 

    public void unregisterDataSetObserver(DataSetObserver arg0) { 

    } 

    public boolean areAllItemsEnabled() { 

     return false; 
    } 

    public boolean isEnabled(int arg0) { 

     return false; 
    } 
} 

查看:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#312843" > 

    <ImageView 
     android:id="@+id/imageView2" 
     android:layout_width="fill_parent" 
     android:layout_height="82dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:scaleType="fitXY" 
     android:src="@drawable/header_side" /> 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="235dp" 
     android:layout_height="82dp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:src="@drawable/header" /> 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/imageView2" 
     android:background="#312843" 
     android:cacheColorHint="#312843" 
     android:fadeScrollbars="true" > 
    </ListView> 

</RelativeLayout> 
+0

你有任何外在上? – Praveenkumar 2012-03-20 15:18:37

回答

1

getView()方法必須返回一個View而不是null您設置它。 (這裏是如何做到這一點的教程:http://www.vogella.de/articles/AndroidListView/article.html#listview_adapterown

而且你getViewTypeCount()方法必須返回不同的數值,然後按0

public int getViewTypeCount() { 
     return 1; 
    } 
+0

好吧,這有助於不使應用程序崩潰,但現在有一個空的列表視圖,我現在也返回了一個TextView對象vom getView() – 2012-03-20 15:38:24

+0

@zolex你沒有看到任何'ListView'(甚至沒有空行? )?檢查'new Database(context).getAllUsers()'是否返回帶有一些元素的'ArrayList'(如果它返回一個空的'ArrayList',那麼你的'ListView'將是空的)。 – Luksprog 2012-03-20 15:45:20

+0

呃大聲笑我註釋掉了實際從數據庫中讀取數據的部分,以確保問題不存在... – 2012-03-20 15:54:23

1

這裏是你的問題

public View getView(int arg0, View arg1, ViewGroup arg2) { 

     return null; 
    } 

你不能返回一個空視圖,它會給你NPE和應用程序將崩潰

in getView you gotta do something like this 
public View getView(int arg0, View convertView, ViewGroup arg2) { 
     View view = convertView; 
     if (convertView == null) { 
      LayoutInflater layout = LayoutInflater.from(context); 
           view = layout.inflate(R.layout.MyLayout, null); 
     } 
return view; 
}