- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 listView,它由来自游标加载器的游标填充,并使用内容提供程序。我想对 listView 进行排序,例如将最新的项目添加到 listView 的顶部。 listView 总是以相同的顺序出现,我无法更改此顺序。
我尝试使用排序顺序并对其进行更改,无论将其设置为什么,listView 始终显示相同位置的项目。使用这样的排序顺序,
CursorLoader loader = new CursorLoader
(List.this, Database.CONTENT_URI, projection,
null, null, LocationsTable.TIME_STAMP + " ASC");
除了 TIME_STAMP 之外,我尝试按其他列排序,但结果始终相同。列表中项目的顺序永远不会改变。即使将 ASC 更改为 DESC 也没有任何效果。
如何设置在填充有 cursorAdapter 的 listView 中显示的项目的顺序或位置?
来自 listview 类的更多代码示例
来自onCreate方法
adapter = new ViewAdapter(this, null, 0);
// sets array adapter to listview
listViewOne.setAdapter(adapter);
getLoaderManager().initLoader(LOADER_ID_ONE, null, this);
LoaderCallbacks<Cursor>
的三个回调方法
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String projection[] = new String[]{LocationsTable._ID,
LocationsTable.LATITUDE, LocationsTable.LONGITUDE,
LocationsTable.LAND_ADDRESS, LocationsTable.LAST_NAME,
LocationsTable.FIRST_NAME, LocationsTable.LOCATION_IMAGE,
LocationsTable.TIME_STAMP };
CursorLoader loader = new CursorLoader
(List.this, Database.CONTENT_URI, projection, null, null,
LocationsTable.TIME_STAMP + " ASC");
return loader;
} // onCreateLoader
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
adapter.swapCursor(cursor);
} // onLoadFinished
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
adapter.swapCursor(null);
} // onLoaderReset
这是用于在数据库中创建表的字符串 extends ContentProvider
private static final String SQL_QUERY_CREATE = "CREATE TABLE "
+ LocationsTable.TABLE_NAME + " (" + LocationsTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + LocationsTable.LATITUDE + " TEXT NOT NULL, "
+ LocationsTable.LONGITUDE + " TEXT NOT NULL, " + LocationsTable.LAND_ADDRESS + " TEXT, " + LocationsTable.LAST_NAME + " TEXT, "
+ LocationsTable.FIRST_NAME + " TEXT, " + LocationsTable.LAST_NAME_ALT + " TEXT, " + LocationsTable.FIRST_NAME_ALT + " TEXT, "
+ LocationsTable.CONTACT_ADDRESS + " TEXT, " + LocationsTable.PHONE_NUMBER + " TEXT, " + LocationsTable.MOBILE_NUMBER + " TEXT, "
+ LocationsTable.EMAIL + " TEXT, " + LocationsTable.LOCATION_IMAGE + " TEXT, " + LocationsTable.TIME_STAMP_IMAGE + " INTEGER, "
+ LocationsTable.TIME_STAMP + " INTEGER " + ");";
游标适配器类
public class ViewAdapter extends CursorAdapter {
LayoutInflater inflater;
LatAndLngString latAndLng;
public ViewAdapter(Context context, Cursor cursor, int b) {
super(context, cursor, b);
inflater = LayoutInflater.from(context);
} // ViewAdapter constructor
@Override
public void bindView(View view, final Context context, Cursor cursor) {
TextView textViewOne = (TextView) view.findViewById(R.id.textView1); // address
TextView textViewTwo = (TextView) view.findViewById(R.id.textView2); // last name
TextView textViewThree = (TextView) view.findViewById(R.id.textView3); // first name
final Button buttonOne = (Button) view.findViewById(R.id.button1);
final ImageView imageViewOne = (ImageView) view.findViewById(R.id.imageView1);
final ImageView imageViewTwo = (ImageView) view.findViewById(R.id.imageView2);
textViewOne.setText(cursor.getString(cursor.getColumnIndex(LocationsTable.LAND_ADDRESS)));
textViewTwo.setText(cursor.getString(cursor.getColumnIndex(LocationsTable.LAST_NAME)));
textViewThree.setText(cursor.getString(cursor.getColumnIndex(LocationsTable.FIRST_NAME)));
String latitude = cursor.getString(cursor.getColumnIndex(LocationsTable.LATITUDE));
String longitude = cursor.getString(cursor.getColumnIndex(LocationsTable.LONGITUDE));
String imagePath = cursor.getString(cursor.getColumnIndex(LocationsTable.LOCATION_IMAGE));
long timeStampImage = cursor.getLong(cursor.getColumnIndex(LocationsTable.TIME_STAMP));
if(imagePath != null){
int widthInDP = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics());
int heightInDP = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());
Bitmap sizedBitmap = ImageUtil.createReducedBitmap(imagePath, widthInDP, heightInDP);
imageViewTwo.setImageBitmap(sizedBitmap);
}
textViewOne.setMaxLines(1);
textViewTwo.setMaxLines(2);
textViewThree.setMaxLines(3);
final LatAndLngString latAndLng = new LatAndLngString(latitude, longitude);
buttonOne.setTag(latAndLng);
imageViewOne.setTag(latAndLng);
imageViewTwo.setTag(latAndLng);
// go to register page to edit fields
buttonOne.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
((Button) view).setAlpha(0.3f);
LatAndLngString latAndLngRow = (LatAndLngString) buttonOne.getTag();
Intent intent = new Intent(List.this, Register.class);
intent.putExtra("latitude", String.valueOf(latAndLngRow.latitude));
intent.putExtra("longitude", String.valueOf(latAndLngRow.longitude));
intent.putExtra("origin", 1);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
List.this.startActivity(intent);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
((Button) view).setAlpha(1.0f);
return true;
}
return false;
}
});
// go to map page to display map
imageViewOne.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
((ImageView) view).setAlpha(0.3f);
LatAndLngString latAndLngRow = (LatAndLngString) buttonOne.getTag();
Intent intent = new Intent(List.this, Map.class);
intent.putExtra("latitude", String.valueOf(latAndLngRow.latitude));
intent.putExtra("longitude", String.valueOf(latAndLngRow.longitude));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("showMarker", true);
List.this.startActivity(intent);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
((ImageView) view).setAlpha(1.0f);
return true;
}
return false;
}
});
// set image for button
imageViewTwo.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
((ImageView) view).setAlpha(0.3f);
LatAndLngString latAndLngRow = (LatAndLngString) view.getTag();
Intent intent = new Intent(List.this, ImageSelector.class);
intent.putExtra("latitude", String.valueOf(latAndLngRow.latitude));
intent.putExtra("longitude", String.valueOf(latAndLngRow.longitude));
List.this.startActivity(intent);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
((ImageView) view).setAlpha(1.0f);
return true;
}
return false;
}
});
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.listview_row, parent, false);
}
}
此处为 CONTENT PROVIDER CLASS 完整代码
// application package name
// import statements
public class Database extends ContentProvider {
private static final UriMatcher sUriMatcher;
private static final int LOCATIONS_ALL = 1;
private static final int LOCATIONS_ONE = 2;
public static final String AUTHORITY = "com.xxx.realestatelocator.Locations";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/locations");
public static final String DATABASE_NAME = "locations.db";
public static final int DATABASE_VERSION = 1;
public static final String CONTENT_TYPE_NOTES_ALL = "vnd.android.cursor.dir/vnd.realestate.locations";
public static final String CONTENT_TYPE_NOTES_ONE = "vnd.android.cursor.item/vnd.realestate.locations";
static {
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(AUTHORITY, "locations", LOCATIONS_ALL);
sUriMatcher.addURI(AUTHORITY, "locations/#", LOCATIONS_ONE);
}
// Map table columns
private static final HashMap<String, String> sNotesColumnProjectionMap;
private DatabaseHelper mDbHelper;
static {
sNotesColumnProjectionMap = new HashMap<String, String>();
sNotesColumnProjectionMap.put(LocationsTable._ID, LocationsTable._ID);
sNotesColumnProjectionMap.put(LocationsTable.LATITUDE, LocationsTable.LATITUDE);
sNotesColumnProjectionMap.put(LocationsTable.LONGITUDE, LocationsTable.LONGITUDE);
sNotesColumnProjectionMap.put(LocationsTable.LAND_ADDRESS, LocationsTable.LAND_ADDRESS);
sNotesColumnProjectionMap.put(LocationsTable.LAST_NAME, LocationsTable.LAST_NAME);
sNotesColumnProjectionMap.put(LocationsTable.FIRST_NAME, LocationsTable.FIRST_NAME);
sNotesColumnProjectionMap.put(LocationsTable.LAST_NAME_ALT, LocationsTable.LAST_NAME_ALT);
sNotesColumnProjectionMap.put(LocationsTable.FIRST_NAME_ALT, LocationsTable.FIRST_NAME_ALT);
sNotesColumnProjectionMap.put(LocationsTable.CONTACT_ADDRESS, LocationsTable.CONTACT_ADDRESS);
sNotesColumnProjectionMap.put(LocationsTable.PHONE_NUMBER, LocationsTable.PHONE_NUMBER);
sNotesColumnProjectionMap.put(LocationsTable.MOBILE_NUMBER, LocationsTable.MOBILE_NUMBER);
sNotesColumnProjectionMap.put(LocationsTable.EMAIL, LocationsTable.EMAIL);
sNotesColumnProjectionMap.put(LocationsTable.LOCATION_IMAGE, LocationsTable.LOCATION_IMAGE);
sNotesColumnProjectionMap.put(LocationsTable.TIME_STAMP_IMAGE, LocationsTable.TIME_STAMP_IMAGE);
sNotesColumnProjectionMap.put(LocationsTable.TIME_STAMP, LocationsTable.TIME_STAMP);
}
public class LocationsTable implements BaseColumns {
public static final String TABLE_NAME = "tbl_locations";
public static final String _ID = "_id";
public static final String LATITUDE = "latitude";
public static final String LONGITUDE = "longitude";
public static final String LAND_ADDRESS = "land_address";
public static final String LAST_NAME = "last_name";
public static final String FIRST_NAME = "first_name";
public static final String LAST_NAME_ALT = "last_name_alt";
public static final String FIRST_NAME_ALT = "first_name_alt";
public static final String CONTACT_ADDRESS = "contact_address";
public static final String PHONE_NUMBER = "phone_number";
public static final String MOBILE_NUMBER = "mobile_number";
public static final String EMAIL = "email_address";
public static final String LOCATION_IMAGE = "location_image";
public static final String TIME_STAMP_IMAGE = "time_stamp_image";
public static final String TIME_STAMP = "time_stamp";
} // LocationsTable inner class
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
private static final String SQL_QUERY_CREATE = "CREATE TABLE "
+ LocationsTable.TABLE_NAME + " (" + LocationsTable._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + LocationsTable.LATITUDE + " TEXT NOT NULL, "
+ LocationsTable.LONGITUDE + " TEXT NOT NULL, " + LocationsTable.LAND_ADDRESS + " TEXT, " + LocationsTable.LAST_NAME + " TEXT, "
+ LocationsTable.FIRST_NAME + " TEXT, " + LocationsTable.LAST_NAME_ALT + " TEXT, " + LocationsTable.FIRST_NAME_ALT + " TEXT, "
+ LocationsTable.CONTACT_ADDRESS + " TEXT, " + LocationsTable.PHONE_NUMBER + " TEXT, " + LocationsTable.MOBILE_NUMBER + " TEXT, "
+ LocationsTable.EMAIL + " TEXT, " + LocationsTable.LOCATION_IMAGE + " TEXT, " + LocationsTable.TIME_STAMP_IMAGE + " INTEGER, "
+ LocationsTable.TIME_STAMP + " INTEGER " + ");";
private static final String SQL_QUERY_DROP = "DROP TABLE IF EXISTS " + LocationsTable.TABLE_NAME + ";";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_QUERY_CREATE);
} // onCreate
@Override
public void onUpgrade(SQLiteDatabase db, int oldVer, int newVer) {
db.execSQL(SQL_QUERY_DROP);
onCreate(db);
} // onUpgrade
} // DatabaseHelper inner class
@Override
public boolean onCreate() {
if(mDbHelper == null) {
mDbHelper = new DatabaseHelper(getContext());
}
return false;
}
@Override
public String getType(Uri arg0) {
return null;
} // getType
// insert one new row, full row
@Override
public Uri insert(Uri uri, ContentValues values) {
if (sUriMatcher.match(uri) != LOCATIONS_ALL) {
throw new IllegalArgumentException(" Unknown URI: " + uri);
}
SQLiteDatabase db = mDbHelper.getWritableDatabase();
long rowId = db.insert(LocationsTable.TABLE_NAME, null, values);
if (rowId > 0) {
Uri notesUri = ContentUris.withAppendedId(CONTENT_URI, rowId);
getContext().getContentResolver().notifyChange(notesUri, null);
return notesUri;
}
throw new IllegalArgumentException("<Illegal>Unknown URI: " + uri);
} // insert
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
switch (sUriMatcher.match(uri)) {
case LOCATIONS_ALL:
builder.setTables(LocationsTable.TABLE_NAME);
builder.setProjectionMap(sNotesColumnProjectionMap);
break;
case LOCATIONS_ONE:
builder.setTables(LocationsTable.TABLE_NAME);
builder.setProjectionMap(sNotesColumnProjectionMap);
builder.appendWhere(LocationsTable._ID + " = " + uri.getLastPathSegment());
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor queryCursor = builder.query(db, projection, selection, selectionArgs, null, null, null);
queryCursor.setNotificationUri(getContext().getContentResolver(), uri);
return queryCursor;
} // query
@Override
public int update(Uri uri, ContentValues values, String where, String[] whereArgs) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
int count = 0;
switch (sUriMatcher.match(uri)) {
case LOCATIONS_ALL:
count = db.update(LocationsTable.TABLE_NAME, values, where, whereArgs);
break;
case LOCATIONS_ONE:
String rowId = uri.getLastPathSegment();
count = db.update(LocationsTable.TABLE_NAME, values, LocationsTable._ID
+ " = " + rowId + (!TextUtils.isEmpty(where) ? " AND (" + ")" : ""), whereArgs);
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
} // update
// delete
@Override
public int delete(Uri uri, String where, String[] whereArgs) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
int count = 0;
switch (sUriMatcher.match(uri)) {
case LOCATIONS_ALL:
count = db.delete(LocationsTable.TABLE_NAME, where, whereArgs);
break;
case LOCATIONS_ONE:
String rowId = uri.getPathSegments().get(1);
count = db.delete(LocationsTable.TABLE_NAME, LocationsTable._ID + " = "
+ rowId + (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), whereArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
} // delete
} // Database
最佳答案
您似乎没有将排序顺序参数传递给数据库连接实例本身,因此结果没有得到排序。确保将 ContentProvider#query
方法中的所有参数委托(delegate)给 SQLiteDatabase
。
因此,您的SQLiteQueryBuilder#build
方法应该如下所示:
Cursor queryCursor = builder.query(db, projection, selection, selectionArgs, null, null, sortOrder);
关于android - 排序顺序不适用于 listView 和游标加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23359824/
我之前让 dll 注入(inject)器变得简单,但我有 Windows 7,我用 C# 和 C++ 做了它,它工作得很好!但是现在当我在 Windows 8 中尝试相同的代码时,它似乎没有以正确的方
我正在尝试制作一个名为 core-splitter 的元素,该元素在 1.0 中已弃用,因为它在我们的项目中起着关键作用。 如果您不知道 core-splitter 的作用,我可以提供一个简短的描述。
我有几个不同的蜘蛛,想一次运行所有它们。基于 this和 this ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。 我试过了: cra
有没有办法在达到特定条件时停止扭曲 react 器。例如,如果一个变量被设置为某个值,那么 react 器应该停止吗? 最佳答案 理想情况下,您不会将变量设置为一个值并停止 react 器,而是调用
https://code.angularjs.org/1.0.0rc9/angular-1.0.0rc9.js 上面的链接定义了外部js文件,我不知道Angular-1.0.0rc9.js的注入(in
我正在尝试运行一个函数并将服务注入(inject)其中。我认为这可以使用 $injector 轻松完成.所以我尝试了以下(简化示例): angular.injector().invoke( [ "$q
在 google Guice 中,我可以使用函数 createInjector 创建基于多个模块的注入(inject)器。 因为我使用 GWT.create 在 GoogleGin 中实例化注入(in
我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示: s
我在 Spring MVC 中设置 initBinder 时遇到一些问题。我有一个 ModelAttribute,它有一个有时会显示的字段。 public class Model { privat
我正在尝试通过jquery post发布knockoutjs View 模型 var $form = $('#barcodeTemplate form'); var data = ko.toJS(vm
如何为包含多态对象集合的复杂模型编写自定义模型绑定(bind)程序? 我有下一个模型结构: public class CustomAttributeValueViewModel { publi
您好,我正在尝试实现我在 this article 中找到的扩展方法对于简单的注入(inject)器,因为它不支持开箱即用的特定构造函数的注册。 根据这篇文章,我需要用一个假的委托(delegate)
你好,我想自动注册我的依赖项。 我现在拥有的是: public interface IRepository where T : class public interface IFolderReposi
我正在使用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入(inject)器: var injector = angular.injector(['ng'
我正在使用 Matlab 代码生成器。不可能包含代码风格指南。这就是为什么我正在寻找一个工具来“ reshape ”、重命名和重新格式化生成的代码,根据我的: 功能横幅约定 文件横幅约定 命名约定 等
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我开发了一种工具,可以更改某些程序的外观。为此,我需要在某些进程中注入(inject)一个 dll。 现在我基本上使用这个 approach .问题通常是人们无法注入(inject) dll,因为他们
我想使用 swing、spring 和 hibernate 编写一个 java 应用程序。 我想使用数据绑定(bind)器用 bean 的值填充 gui,并且我还希望它反射(reflect) gui
我有这段代码,当两个蜘蛛完成后,程序仍在运行。 #!C:\Python27\python.exe from twisted.internet import reactor from scrapy.cr
要点是 Spring Batch (v2) 测试框架具有带有 @Autowired 注释的 JobLauncherTestUtils.setJob。我们的测试套件有多个 Job 类提供者。因为这个类不
我是一名优秀的程序员,十分优秀!