Сбои приложения Android в ListActivity, ListView и ListAdapter - PullRequest
0 голосов
/ 20 марта 2012

У меня проблемы с созданием простого списка (некоторые расширяемые списки уже работают). Приложение падает, когда я делаю setListAdapter(). Где моя ошибка?

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>

Ответы [ 2 ]

1 голос
/ 20 марта 2012

вот ваша проблема

  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;
}
1 голос
/ 20 марта 2012

Ваш getView() метод должен вернуть View, а не null, как вы его установили. (вот учебник о том, как это сделать: http://www.vogella.de/articles/AndroidListView/article.html#listview_adapterown)

Также ваш метод getViewTypeCount() должен возвращать значение, отличное от 0.

   public int getViewTypeCount() {
        return 1;
    }
...