简体   繁体   中英

Android: ListActivity does not display any Item

I hope you help me with this problem. My ListActivity Class woudlnt show ant item in the list

this is my code:

import android.os.Bundle;
import android.provider.BaseColumns;
import android.app.Activity;
import android.app.ListActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.SimpleCursorAdapter;
import android.support.v4.app.NavUtils;

public class Sale2 extends ListActivity {
    private static final int DIALOG_ID = 100;

    private SQLiteDatabase database;

    DBAdapter db;

    private CursorAdapter dataSource;

    private View entryView;

    private EditText firstNameEditor;

    private EditText lastNameEditor;

    private static final String fields[] = { "_id", "_date", "_soldPrice" };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            db = new DBAdapter(this);
            db.open();
            Cursor data = db.getAllSales2();
            System.out.println("after getallsales2");
            dataSource = new SimpleCursorAdapter(this, R.layout.row, data,
                    fields, new int[] { R.id._id, R.id.first, R.id.last });
            System.out.println("after simplecursoradapter"
                    + dataSource.toString());

            setListAdapter(dataSource);
            System.out.println("setListAdapter");
        } catch (Exception e) {
            Log.e("ERROR", "ERROR IN CODE: " + e.toString());
            e.printStackTrace();
        }
    }

}

and this is row.xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

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

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

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

</LinearLayout>

Notes:

Im sure that the cursor has some data on it. But It wouldnt display them

Help is appreciated

您错过了对setContentView(View)的调用,该调用包含一个listview,应该使用Cursor中的数据填充该listview

Try this:

public class Sale2 extends ListActivity {
    private static final int DIALOG_ID = 100;

    private SQLiteDatabase database;

    DBAdapter db;

    private ListAdapter dataSource;

    private View entryView;

    private EditText firstNameEditor;

    private EditText lastNameEditor;

    private static final String fields[] = { "_id", "_date", "_soldPrice" };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            db = new DBAdapter(this);
            db.open();
            Cursor data = db.getAllSales2();
            System.out.println("after getallsales2");
            startManagingCursor(data);
            dataSource = new SimpleCursorAdapter(this, R.layout.row, data,
                    fields, new int[] { R.id._id, R.id.first, R.id.last });
            System.out.println("after simplecursoradapter"
                    + dataSource.toString());

            setListAdapter(dataSource);
            System.out.println("setListAdapter");
        } catch (Exception e) {
            Log.e("ERROR", "ERROR IN CODE: " + e.toString());
            e.printStackTrace();
        }
    }

}

I have changed the dataSource to ListAdapter and also added the startManagingCursor .

Also see the example over here

http://developer.android.com/reference/android/app/ListActivity.html

You have forgotten to use the reference to the ListView, but as you have extended the ListActivity instead of Activity, you must get the reference to the ListActivity's List as follow:

ListView lv = getListView();

I think you need to set the adapter on the list object loaded from xml. Something like:

listaNodiView = (ListView) findViewById(R.id.ListViewLista);
listaNodiView.setListAdapter(dataSource);

where R.id.ListViewLista is the id of the List resource inside your layout xml declaration (NOT row.xml)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM