listview не заполняется из cursorLoader

Используя пример приложения для cursorLoader, я пытаюсь обновить свой код для списка, который заполняется именами контактов и фотографиями, помеченными в телефоне. Проблема в том, что просмотр списка не появляется, и я не получаю ошибку. вот мой связанный код:

ContactInfoListAdapter:

public class ContactInfoListAdapter extends ResourceCursorAdapter {

private final ContentResolver mContentResolver;
private Bitmap mNoPictureBitmap;

private String TAG = "ContactInfoListAdapter";

public ContactInfoListAdapter(Context context, int layout, Cursor c,
    int flags) {

super(context, layout, c, flags);

mContentResolver = context.getContentResolver();

// Default thumbnail bitmap for when contact has no thubnail 
mNoPictureBitmap = BitmapFactory.decodeResource(context.getResources(),
        R.drawable.defcontpic);

}

// Called when a new view is needed

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {

LayoutInflater inflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

return inflater.inflate(R.layout.favs_list_item, parent, false);

}

// Called when a new data view is needed, but an old view is 
// available for reuse

@Override
public void bindView(View view, Context context, Cursor cursor) {

// Set display name
TextView textView = (TextView) view.findViewById(R.id.tvContactName);
textView.setText(cursor.getString(cursor
        .getColumnIndex(Contacts.DISPLAY_NAME)));

// Set default thumbnail
ImageView imageView = (ImageView) view.findViewById(R.id.ivDefContact);
Bitmap photoBitmap = mNoPictureBitmap;

// Try to set actual thumbnail, if it's available

String photoContentUri = cursor.getString(cursor
        .getColumnIndex(Contacts.PHOTO_THUMBNAIL_URI));

if (null != photoContentUri) {

    InputStream input = null;

    try {

        // read thumbail data from memory

        input = mContentResolver.openInputStream(Uri
                .parse(photoContentUri));

        if (input != null) {

            photoBitmap = BitmapFactory.decodeStream(input);

        }

    } catch (FileNotFoundException e) {

        Log.i(TAG, "FileNotFoundException");

    }
}

imageView.setImageBitmap(photoBitmap);

}
}

Деятельность:

public class DialerActivity extends Activity implements View.OnClickListener     View.OnLongClickListener, 
AdapterView.OnItemClickListener, LoaderManager.LoaderCallbacks<Cursor>{
private ContactInfoListAdapter starAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialer_layout);

WindowManager.LayoutParams wmlp = getWindow().getAttributes();
wmlp.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;

overridePendingTransition(R.animator.push_right_in,0);

Initialise();
starAdapter = new ContactInfoListAdapter(this, R.layout.favs_list_item, null, 0);
listStarred = (ListView) findViewById(R.id.lvFavs);
listStarred.setAdapter(starAdapter);
listStarred.setOnItemClickListener(this);
 // Initialize the loader
    getLoaderManager().initLoader(0, null, this);
}
static final String[] CONTACTS_ROWS = new String[] { Contacts._ID,
    Contacts.DISPLAY_NAME, Contacts.PHOTO_THUMBNAIL_URI };

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
            + Contacts.DISPLAY_NAME + " != '' ) AND (" + Contacts.STARRED
            + "== 1))";

    // String used for defining the sort order
    String sortOrder = Contacts._ID + " ASC";

    return new CursorLoader(this, Contacts.CONTENT_URI, CONTACTS_ROWS,
            select, null, sortOrder);
}

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
    starAdapter.swapCursor(cursor);
    starAdapter.notifyDataSetChanged();

}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
    starAdapter.swapCursor(null);

}

dialer_layout (является относительным Layout с LinearLayout, в котором находится список):

<LinearLayout
android:id="@+id/llFavs"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/b3"
android:layout_alignParentEnd="false"
android:layout_marginBottom="8dp"
android:layout_marginTop="5dp"
android:orientation="vertical">

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

</LinearLayout>

favs_list_item.xml:

    <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="114dp">

    <ImageView
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:id="@+id/ivDefContact"
        android:src="@drawable/defcontpic"
        android:layout_marginLeft="5dp"/>

    <TextView
        android:layout_width="68dp"
        android:layout_height="wrap_content"
        android:text="..........."
        android:id="@+id/tvContactName"
        android:gravity="center"
        android:layout_marginLeft="5dp"
        android:textSize="12sp"/>

</LinearLayout>

1 ответ

Неважно я решил, это была глупая опечатка

@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
starAdapter.swapCursor(cursor);
starAdapter.notifyDataSetChanged();

}

@Override
public void onLoaderReset(Loader<Cursor> arg0) {
starAdapter.swapCursor(null);

swapCursor в методе onLoadFinished, должен быть "arg1", а не "cursor". К сожалению, у меня уже была переменная "курсор", и в Eclipse не появилось никаких ошибок. Я потерял 2 часа на это.

Другие вопросы по тегам