Android ListView未填充FragmentActivity
我正在构建我的第一个AndroidApp,无法使用数据库中的数据填充ListView。数据肯定在那里,因为我可以循环遍历它,然后Toast()它,数据就会显示出来——因为某种原因,我无法将它放入ListView。代码如下: ListSmsRecipients.javaAndroid 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
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);