Android ListView未填充FragmentActivity

Android ListView未填充FragmentActivity,android,listview,android-fragmentactivity,Android,Listview,Android Fragmentactivity,我正在构建我的第一个AndroidApp,无法使用数据库中的数据填充ListView。数据肯定在那里,因为我可以循环遍历它,然后Toast()它,数据就会显示出来——因为某种原因,我无法将它放入ListView。代码如下: ListSmsRecipients.java import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; impor

我正在构建我的第一个AndroidApp,无法使用数据库中的数据填充ListView。数据肯定在那里,因为我可以循环遍历它,然后Toast()它,数据就会显示出来——因为某种原因,我无法将它放入ListView。代码如下:

ListSmsRecipients.java

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class ListSmsRecipients extends Base_Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.smslist);

        Button addSmsRecipient = (Button) findViewById(R.id.btn_listSms_addSms);
        DbHelper dbhelper = new DbHelper(getApplicationContext());
        SQLiteDatabase db = dbhelper.getWritableDatabase();

        String[] from = new String[] { DbHelper.SMS_NAME, DbHelper.SMS_PHONE, DbHelper.SMS_MESSAGE };
        String[] column = new String[] {DbHelper.SMS_ID, DbHelper.SMS_NAME, DbHelper.SMS_PHONE, DbHelper.SMS_MESSAGE };
        int[] toViewIDs = new int[] { R.id.temp_smslist_item_name, R.id.temp_smslist_item_phone, R.id.temp_smslist_item_message };

        Cursor cursor = db.query(DbHelper.SMS_TABLE_NAME, column, null, null, null, null, null);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.smslist_item, cursor, from, toViewIDs);

        ListView list = (ListView)findViewById(R.id.listview_smsList);
        list.setAdapter(adapter);


        // This works
        cursor.moveToFirst();
        while (cursor.moveToNext())
        {
            String name = cursor.getString(cursor.getColumnIndex(DbHelper.SMS_NAME));
            String phone = cursor.getString(cursor.getColumnIndex(DbHelper.SMS_PHONE));
            String message = cursor.getString(cursor.getColumnIndex(DbHelper.SMS_MESSAGE));

            Toast.makeText(getApplicationContext(), "Name = " + name + "\nPhone = " + phone + "\nMessage = " + message, Toast.LENGTH_SHORT).show();
        }

        cursor.close();
    }
}
BaseActivity.java

import android.support.v4.app.FragmentActivity;

public class Base_Activity extends FragmentActivity
{

}
smslist.xml

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

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

</LinearLayout>

smslist_item.xml

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

    <TextView
        android:id="@+id/temp_smslist_item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text" />

    <TextView
        android:id="@+id/temp_smslist_item_phone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium Text" />

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

</LinearLayout>

问题在于适配器声明。将getApplicationContext()更改为getActivity(),如下所示

SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(), R.layout.smslist_item, cursor, from, toViewIDs);

希望这能对您有所帮助。

在Anu和Ramesh_D的帮助下,我只需更改代码以扩展Activity cursor.close(),然后将适配器调用更改为以下内容:SimpleCrsorAdapter adapter=new SimpleCrsorAdapter(this,R.layout.smslist_项,cursor,from,toviewId)

你的光标里有数据吗?您的适配器是cursorAdapter吗?请尝试SimpleCursorAdapter=new SimpleCursorAdapter(getApplicationContext(),R.layout.smslist_项,光标,列,toViewId);不要在oncreate()中关闭光标;光标未填充时出现的问题创建时关闭光标不正确。也可以使用活动本身,而不是零碎的活动。FragmentActivity用于加载碎片。感谢Anu!我只是简单地更改了代码以根据Ramesh_D的注释扩展活动,删除了cursor.close(),然后将适配器调用更改为以下内容:SimpleCursorAdapter=new simplecursorsadapter(this,R.layout.smslist_项,cursor,from,toViewIDs);