Android SDK文档说该startManagingCursor()方法已被删除:
不推荐使用此方法.改为使用新的CursorLoader类和LoaderManager; 这也可以通过Android兼容包在旧版平台上使用.此方法允许活动根据活动的生命周期为您管理给定的Cursor生命周期.也就是说,当活动停止时,它将自动调用给定Cursor上的deactivate(),稍后重新启动它将为您调用requery().当活动被销毁时,所有托管游标将自动关闭.如果您的目标是HONEYCOMB或更高版本,请考虑改为使用LoaderManager,可通过getLoaderManager()获取
所以我想用CursorLoader.但是当我在构造函数中需要URI时,如何使用自定义CursorAdapter和不使用它?ContentProviderCursorLoader
android cursor android-contentprovider android-loadermanager android-cursorloader
有谁知道如何使用Robolectric测试以下设置?
包含ViewPager的片段,使用CursorLoader加载的数据.
使用下面的代码,CursorLoader永远不会被推入视图寻呼机的适配器中.我被await()电话困住了.
EventsFragmentTest.java:
@RunWith(CustomRobolectricTestRunner.class)
public class EventsFragmentTest extends AbstractDbAndUiDriver
{
// which element in the view pager we are testing
private static final int TEST_INDEX = 0;
protected SherlockFragmentActivity mActivity;
protected EventsFragment_ mFragment;
@Override
@Before
public void setUp() throws Exception
{
// create activity to hold the fragment
this.mActivity = CustomRobolectricTestRunner.getActivity();
// create and start the fragment
this.mFragment = new EventsFragment_();
}
@Test
public void sanityTest()
{
// create an event
final Event event = this.createEvent();
// …Run Code Online (Sandbox Code Playgroud) 我创建了一个小应用程序,试图理解LoaderManager和CursorLoader-classes 的功能.
我已经实现了LoaderCallbacks<Cursor>我的FragmentActivity-class,一切工作正常,但事实上,当我通过我的更新数据ContentResolver.update()或ContentResolver.insert()-方法,onLoadFinished()不叫,结果我的数据不会更新.
我有一个自定义ContentProvider,我想知道问题是在我的ContentProvider中没有通知数据已更改或其他内容.
android android-contentprovider android-loadermanager android-cursorloader
因此,我无法在使用自定义的同时扩展MultiAutoCompleteTextView和支持它.这个问题特别随着电话而上升.在其中有一个游标作为参数方法具有在第一调用此方法有效的和未封闭的光标.但是,后续调用会导致空游标或关闭游标.我猜这与管理如何有关. CursorLoaderTokenizermAdapter.setCursorToStringConverter();convertToString()LoaderManagerCursorLoader
如果我将setCursorToStringConverter()方法注释掉,那么我会根据我在此视图中输入的文本看到可用选项列表.但是,由于没有convertToString()实现terminateToken()方法,因此自定义方法Tokenizer不接收我想要的字符串,而是接收游标对象的代表字符串,因为游标尚未用于获取当前字符串值在得到的查询中的所需列的.
任何人都已经能够实现三类的组合(CursorLoader/LoaderManger,MultiAutoCompleteTextView,和Tokenizer)?
我是否朝着正确的方向前进,或者这根本不可能?
我已经能够实现一个自定义MultiAutoCompleteTextView支持SimpleCursorAdapter的自定义Tokenizer.我只是想知道是否有可能使用a来实现它CursorLoader,因为严格模式抱怨光标MultiAutoCompleteTextView没有被明确关闭.
任何帮助将不胜感激.
public class CustomMultiAutoCompleteTextView extends MultiAutoCompleteTextView
implements LoaderManager.LoaderCallbacks<Cursor> {
private final String DEBUG_TAG = getClass().getSimpleName().toString();
private Messenger2 mContext;
private RecipientsCursorAdapter mAdapter;
private ContentResolver mContentResolver;
private final char delimiter = ' ';
private CustomMultiAutoCompleteTextView mView;
// If non-null, this is the current filter the …Run Code Online (Sandbox Code Playgroud) android stringtokenizer autocompletetextview android-cursorloader
我正在设置我的应用程序,以便人们可以创建他们的朋友组.创建组时,它会将2个表写入SQL数据库.第一个表有一个组名和一个组ID.第二个表有2列,一个组ID和一个用户ID.这工作正常.
但是,现在我希望能够从数据库中读取.我正在使用listview片段,cursorloader但是我无法显示信息.我想列出列表视图中第一个表中的所有组名.
我的问题是,当我第一次使用的cursorloader列出我的联系人,我使用的是Uri来自content provider于onCreateLoader方法.特别是我CONTENT_URI从ContactsContracts.Contacts班上来的.
的例子cursorloader有contentprovider:
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
Uri contentUri = ContactsContract.Contacts.CONTENT_URI;
return new CursorLoader(getActivity(),contentUri,PROJECTION,SELECTION,ARGS,ORDER);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果不使用内容提供程序,我不知道该onCreateLoader方法应该放什么,因为在第二个参数中return new CursorLoader(...)需要a Uri.
有关如何在列表视图中显示数据库数据的任何建议?
片段类代码:
public class GroupListFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
CursorAdapter mAdapter;
private OnItemSelectedListener listener;
private static final String[] PROJECTION ={GroupContract.GroupDetails.COLUMN_NAME_GROUP_NAME};
private static final String SELECTION = null;
final String[] FROM = …Run Code Online (Sandbox Code Playgroud) android android-listview simplecursoradapter android-fragments android-cursorloader
3.0我们得到了花哨的LoaderManager,使用它处理数据加载AsyncTaskLoader中,CursorLoader和其他自定义Loader实例.但是通过这些文档来阅读这些我无法理解这一点:这些比仅仅使用旧AsyncTask的数据加载更好吗?
android android-asynctask android-loadermanager android-cursorloader
我创建了一个Activity,因为我正在实现CursorLoader以从数据库加载数据.
我已经为该表的所有记录做了那件事,但我想加载30-30条记录,比如加载更多功能
我试图创建查询并加载前30条记录,但我无法理解如何请求新记录.
我的活动代码如下:
public class ProductListActivity extends AppCompatActivity
implements LoaderManager.LoaderCallbacks<Cursor> {
/**
* Records in list
*/
int offset = 0;
/**
* For Current Activity *
*/
Context mContext;
/**
* Activity Binding
*/
ActivityProductListBinding activityProductListBinding;
/**
* Product Adapter
*/
ProductListAdapter productListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* DataBinding with XML
*/
activityProductListBinding = DataBindingUtil.setContentView(this, R.layout.activity_product_list);
/**
* Getting Context
*/
mContext = getApplicationContext();
/***
* TOOLBAR Settings...
*/
setSupportActionBar(activityProductListBinding.toolbar);
activityProductListBinding.toolbarTitleTextview.setText(R.string.string_title_products); …Run Code Online (Sandbox Code Playgroud) android android-contentprovider android-cursor android-cursorloader android-cursoradapter
我有一个CursorLoader直接使用SQLite数据库而不是使用的自定义ContentProvider.这个加载器使用a ListFragment支持CursorAdapter.到现在为止还挺好.
为了简化操作,我们假设UI上有一个Delete按钮.当用户单击此按钮时,我会从数据库中删除一行,并调用onContentChanged()我的加载程序.此外,在onLoadFinished()回调时,我调用notifyDatasetChanged()我的适配器以刷新UI.
当删除命令快速连续发生时,意味着快速连续onContentChanged()调用,bindView()最终将使用陈旧数据.这意味着行已被删除,但ListView仍在尝试显示该行.这导致了Cursor异常.
我究竟做错了什么?
这是一个自定义的CursorLoader(基于Diane Hackborn女士的建议)
/**
* An implementation of CursorLoader that works directly with SQLite database
* cursors, and does not require a ContentProvider.
*
*/
public class VideoSqliteCursorLoader extends CursorLoader {
/*
* This field is private in the parent class. Hence, redefining it here.
*/
ForceLoadContentObserver mObserver;
public VideoSqliteCursorLoader(Context context) {
super(context); …Run Code Online (Sandbox Code Playgroud) android asynctaskloader android-loadermanager android-cursorloader android-loader
所以我有我的MainDisplayActivity两个Activity和LoaderManager.LoaderCallbacks<Cursor>.在这里,我有一个A ListView,我填写了我使用ContentProvider从我的数据库获得的议程信息.我也有GridView一个日历.我点击一个单元格时设置了它,在点击的那一天更新议程.我的问题是,当重用我在onCreate()setOnItemClickListener()内部创建的Loader时,它不会使用我正在创建的新游标刷新信息.我可以用另一个ID创建一个新的Loader,它可以运行一次,但是一旦我点击另一天,它就会停止刷新.问题在于光标.如何从Loader刷新游标,这样我就不必继续创建新的Loader?提前致谢!
初始调用在My MainDisplayActivity类中的onCreate()中创建Loader :
makeProviderBundle(new String[] {"_id, event_name, start_date, start_time, end_date, end_time, location"},
"date(?) >= start_date and date(?) <= end_date", new String[]{getChosenDate(), getChosenDate()}, null);
getLoaderManager().initLoader(0, myBundle, MainDisplayActivity.this);
list.setAdapter(agendaAdapter);
Run Code Online (Sandbox Code Playgroud)
这些是被重写的方法 LoaderCallbacks<Cursor>
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri baseUri = SmartCalProvider.CONTENT_URI;
return new CursorLoader(this, baseUri, args.getStringArray("projection"),
args.getString("selection"), args.getStringArray("selectionArgs"), args.getBoolean("sortOrder") ? args.getString("sortOrder") : null );
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
agendaAdapter.swapCursor(arg1);
}
@Override …Run Code Online (Sandbox Code Playgroud) debugging android android-contentprovider android-loadermanager android-cursorloader
使用下面的功能,我试图获取用户在其Android手机上从Chrome浏览器访问的最新网址.此功能适用于大多数站点,但不适用于"www.reddit.com".
url如果我访问"www.google.com","www.hulu.com"或"www.kayak.com",则下面的变量会更新,但如果我访问"www.reddit.com"则不会更新.
如果我去"m.reddit.com" 它会更新.与facebook相同的问题,检测m.facebook.com但不是www.facebook.com.
我不明白Android记录一个但不记录另一个的"www.reddit.com"和"m.reddit.com"之间有什么区别.
我需要在代码中进行哪些更改才能检测到所有URL访问?
public String returnLastChromeURL(int browserCode) {
String[] proj = new String[] { Browser.BookmarkColumns.DATE,
Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL };
String dateTime;
Uri uriCustom = Uri
.parse("content://com.android.chrome.browser/bookmarks");
String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history,
// 1 = bookmark
try {
Cursor mCur = mContext.getContentResolver().query(uriCustom, proj, sel,
null, BookmarkColumns.DATE + " ASC");
mCur.moveToFirst();
mCur.moveToLast();
dateTime = mCur.getString(mCur
.getColumnIndex(Browser.BookmarkColumns.DATE));
title = mCur.getString(mCur
.getColumnIndex(Browser.BookmarkColumns.TITLE));
url = mCur.getString(mCur
.getColumnIndex(Browser.BookmarkColumns.URL)); …Run Code Online (Sandbox Code Playgroud) android bookmarks google-chrome browser-history android-cursorloader