我编写了一个小型Android应用程序,可以抓取一些数据并将其显示在ListView中。
我希望列表按升序排序(无概率)。但是当我添加新项目时,即使重新加载视图/应用程序,它也会保留在列表的底部。似乎唯一正在排序的数据是在数据库OnCreate()方法中创建的条目。
我不确定要提供什么代码,但我首先会向您展示DBAdapter类的片段,然后从主app类中显示。
数据库构建查询:
private static final String DATABASE_CREATE =
"create table "+ DATABASE_TABLE
+ "("
+ FIELD_ROWID+" integer primary key autoincrement, "
+ FIELD_NAME +" varchar(30) not null, " + FIELD_TELEPHONE + " varchar(20) not null, "
+ FIELD_ADDRESS + " text not null,"
+ FIELD_URL + " varchar(255) not null);";
获取数据列表的功能:
public Cursor getRestaurants()
{
Cursor result = null;
try{
result = db.query(DATABASE_TABLE, new String[] {FIELD_ROWID, FIELD_NAME}, null, null, null, null, FIELD_NAME+" ASC");
}
catch (Exception e)
{
Log.v("applog", e.getMessage());
}
return result;
}
这是主要方法的片段。在这里你可以看到我正在调用上面显示的getRestaurants()函数。我很难理解为什么没有对数据进行排序。
任何建议都非常感谢。提前谢谢。
public class Assignment2 extends ListActivity {
// Set up some global variables.
private static final int ADD_NEW_ID = Menu.FIRST;
private static final int CLOSE_APP_ID = ADD_NEW_ID+1;
private final DBAdapter db = new DBAdapter(this);
private static CursorAdapter curAdapter = null;
private static Cursor rawData = null;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
db.open(); // Open connection to restaurant db.
rawData = db.getRestaurants();
Log.v("applog", rawData.getCount()+" Restaurants loaded from DB.");
if(rawData.getCount() == 0)
{
Toast.makeText(getApplicationContext(), "No restaurants found.", Toast.LENGTH_SHORT).show();
}
try
{
/* The following two arrays are used to map DB fields to ListView items
* From a custom layout file.
*/
// Array of db fields to be used when converting cursor to ListView
String[] strFields = { "name", BaseColumns._ID };
// Array of listview id's to be used when populating the ListView
int[] intFields = { R.id.first };
curAdapter = new SimpleCursorAdapter(this, R.layout.row, rawData, strFields, intFields);
}
catch (Exception e)
{
Log.v("applog", e.getMessage());
}
// Apply the converter cursor to the current ListView
setListAdapter(curAdapter);
db.close(); // Close connection to restaurant db.
答案 0 :(得分:0)
我不确定你的问题是什么,但是,当我从新的数据插页中获得回调时,这一切看起来都很好,减去了我的代码行
if(cursor!=null)cursor.requery();
adapter.notifyDataSetChanged();
希望这可以解决您的问题。