实际上我已经读过一些关于此的问题......
这是我使用的代码
auto = (ListView)findViewById(R.id.auto);
String[] projection = new String[] {Browser.BookmarkColumns._ID,Browser.BookmarkColumns.TITLE,Browser.BookmarkColumns.URL};
String[] displayFields = new String[] {Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL};
int[] displayViews = new int[] { R.id.text1,R.id.text2 };
Cursor cur = managedQuery(android.provider.Browser.BOOKMARKS_URI,projection, null, null, null);
//auto.setAdapter(new SimpleCursorAdapter(this, R.layout.mylist, cur,displayFields, displayViews));
myAdapter apt = new myAdapter(this, R.layout.mylist, cur,displayFields, displayViews);
auto.setAdapter(apt);
Run Code Online (Sandbox Code Playgroud)
和类myAdapter
class myAdapter extends SimpleCursorAdapter{
private Cursor c;
private Context context;
public myAdapter(Context context, int layout, Cursor c, String[] from,
int[] to) {
super(context, layout, c, from, to);
// TODO Auto-generated constructor stub …Run Code Online (Sandbox Code Playgroud) 我很抱歉,如果这看起来像一百万次相同的问题...但谷歌搜索这个没有提供任何结果,只是一堆过时的教程使用managedQuery和其他已弃用的解决方案......
我通过Android开发人员培训检索联系人列表,但教程不完整,甚至下载示例代码也无济于事,因为示例代码用于更高级的联系人列表操作(搜索等)
在任何情况下,没有理由不应该有一个简单的解决方案,所以我希望有人可以在这里回答,因为我确信这已经做了一百万次,我相信其他几十个开始android开发人员我会很感激的.
没有任何联系人出现,我已经按照我的知识进行了教程.我认为最重要的是它TO_IDS是一个指向的整数数组android.R.id.text1.我很困惑如何以某种方式拉出一系列联系人姓名.
另外,我很困惑为什么当最终目标是显示列表视图时需要textview ...在教程中,我们有mContactsList这是一个列表视图...但是我们使用指向R.layout.contact_list_item哪个的适配器填充列表视图只是由TO_IDS填充的文本视图,这是一个整数数组.
mContactsList = (ListView) getActivity().findViewById(R.layout.contact_list_view);
mCursorAdapter = new SimpleCursorAdapter(
getActivity(),
R.layout.contact_list_item,
null,
FROM_COLUMNS, TO_IDS,
0);
mContactList.setAdapter(mCursorAdapter);
Run Code Online (Sandbox Code Playgroud)
我做错了什么,如何在列表视图中显示联系人列表?
编辑:添加我的代码:
在我的片段类中:
public class MyFragment extends Fragment implements
LoaderManager.LoaderCallbacks<Cursor>{
private static final String[] FROM_COLUMNS = {ContactsContract.Contacts.DISPLAY_NAME_PRIMARY };
private static final int[] TO_IDS = {android.R.id.text1};
ListView mContactList;
private SimpleCursorAdapter mCursorAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.contact_list_view,container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
mContactsList …Run Code Online (Sandbox Code Playgroud) 我正在制作一个电视指南应用程序,它使用一次ListActivity显示一个频道/一天的电视节目.我使用RelativeLayout的ListView项目,我想ListView看看是这样的:
07:00 The Breakfast Show
Latest news and topical reports
08:00 Tom and Jerry
More cat and mouse capers
Run Code Online (Sandbox Code Playgroud)
我ListView使用以下代码获取项目的数据:
Cursor cursor = db.rawQuery(SELECT blah,blah,blah);
String[] columnNames = new String[]{"start_time","title", "subtitle"};
int[] resIds = new int[]{R.id.start_time_short, R.id.title, R.id.subtitle};
adapter = new SimpleCursorAdapter(this, R.layout.guide_list_item, cursor, columnNames, resIds);
Run Code Online (Sandbox Code Playgroud)
我的问题是该start_time字段datetime具有以下格式:
2011-01-23 07:00:00
Run Code Online (Sandbox Code Playgroud)
所以我得到的是:
2011-01-23 07:00:00 The Breakfast Show
Latest news and topical reports
2011-01-23 08:00:00 Tom and Jerry
More …Run Code Online (Sandbox Code Playgroud) android android-listview simplecursoradapter android-viewbinder
我从我找到的唯一一个例子中创建了一个自定义的SimpleCursorAdapter .
调用我的ListActivity时,将为每个数据库条目调用newView和bindView,并为每个条目再次调用.我有几个问题:
- 这是正确的例子(如果没有,我在哪里可以找到一个)?
-if bindView调用总是在newView调用之前,为什么在两个函数中都这样做?
为什么序列newView-bindView为每个项目调用两次?
为什么有些CursorAdapter示例使用getView而不是newView和bindView?
基本上,应该如何使用SimpleCursorAdapter,以及我的代码有什么问题?
谢谢
ListActivity
public class ContactSelection extends ListActivity {
private WhipemDBAdapter mDbHelper;
private FriendAdapter friendAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = new WhipemDBAdapter(this);
mDbHelper.open();
setContentView(R.layout.contact_list);
Cursor c = mDbHelper.fetchAllFriends();
startManagingCursor(c);
String[] from = new String[] {};
int[] to = new int[] {};
this.friendAdapter = new FriendAdapter(this, R.layout.contact_row, c, from, to);
setListAdapter(this.friendAdapter);
getListView().setItemsCanFocus(false);
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}
@Override
protected void onResume() {
super.onResume();
mDbHelper.open();
}
@Override
protected …Run Code Online (Sandbox Code Playgroud) 您好想创建一个自定义光标适配器,以便我可以显示带有2行文本的图像.我在理解自定义游标适配器时遇到了一些麻烦,但我不明白如何添加要从我的数据库中的路径填充的imageview.
我正在开发一个针对API级别8(2.2,Froyo)的Android应用程序.我正在使用a ContentProvider,这很简单,我正在使用SimpleCursorAdapter填写我的列表视图,但我在SimpleCursorAdapter的文档中注意到,不推荐使用以下注释的无标记构造函数:
不推荐使用此构造函数.不鼓励使用此选项,因为它会导致在应用程序的UI线程上执行Cursor查询,从而导致响应能力较差甚至应用程序无响应错误.或者,使用带有CursorLoader的LoaderManager.
由于我的目标是API级别8,因此a LoaderManager不依赖于Activity.FragmentActivity兼容包中的类执行此操作,但我没有使用Fragments.
我的问题是:我应该如何LoaderManager/CursorLoader在针对11级以前API级别的应用中使用它?我是否被迫转换为Fragments或者我应该恢复到已弃用的SimpleCursorAdapter构造函数(但是使用一个AsyncTask来保持UI线程友好,这CursorLoader应该是什么)?
java android simplecursoradapter android-fragments android-loadermanager
我有一个listview填充了使用SimpleCursorAdapter的游标数据.我想这样做,所以我可以选择多个项目,每个项目都有一个复选框,但我只能一次检查一个项目,即每次选择一个项目时,它将清除当前选择的项目.
如果我使用ArrayAdapter填充列表视图,它工作正常.我可以选择多个项目.所以我不知道为什么它不适用于SimpleCursorAdapter.
如果重要的话,这将在DialogFragment中创建.
真的把头发拉出来,请帮助!!
这是代码:
Cursor attributesCursor = mDBHelper.getItemAttributesbyType(menuID, itemID, "M");
getActivity().startManagingCursor(attributesCursor);
ListView lv = new ListView(this.getActivity());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
lv.setLayoutParams(params);
SimpleCursorAdapter adapter = new SimpleCursorAdapter(
getActivity(), android.R.layout.simple_list_item_multiple_choice,
attributesCursor, new String[] { "AttributeDescription" },
new int[] { android.R.id.text1 },0);
attributesLinearLayout.addView(lv);
lv.setAdapter(adapter);
lv.setItemsCanFocus(false);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Run Code Online (Sandbox Code Playgroud)
编辑:只是为了添加一些额外的信息,如果我使用这个代码,多选项列表视图工作,其中"项目"是一个简单的字符串数组:
lv.setAdapter(new ArrayAdapter(this.getActivity(),
android.R.layout.simple_list_item_multiple_choice, items));
Run Code Online (Sandbox Code Playgroud)
此外,此listview将动态添加到包含其他控件的dialogfragment中的现有Linearlayout(attributesLinearLayout).我也尝试扩展其他适配器,包括阵列适配器和客户项目布局,但这又不允许我选择多个项目.
请帮忙!!
我正在使用SimpleCursorAdapter在ListView中显示结果,但由于我必须在搜索期间(使用SearchView小部件)多次查询我的数据库,因此我担心光标可能会被打开.
这是我查询我的数据库并在ListView中显示结果的方法:
class SearchCustomers extends AsyncTask<String,Void,Cursor>{
@Override
protected Cursor doInBackground(String... params) {
//get the query
String query=params[0].toLowerCase(Locale.getDefault());
Cursor cursor=mDB.searchCustomersByName((query != null ? query : "@@@@"));
return cursor;
}
@Override
protected void onPostExecute(Cursor result) {
if (result != null) {
String[] from = new String[] { QuickOrderDB.ID,
QuickOrderDB.NAME,
QuickOrderDB.ADDRESS,
QuickOrderDB.PHONE_NUMBER };
int[] to = new int[] { R.id.customerIDTextView,
R.id.customerNameTextView,R.id.customerAddressTextView ,
R.id.customerPhoneTextView };
SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter(SearchCustomersActivity.this,
R.layout.results_customer_item, result, from, to);
mResultsListView.setAdapter(cursorAdapter);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多东西来关闭光标,但即使我mResultsListView.setAdapter(cursorAdapter);在结果总是相同之后关闭它:一个空的ListView.
我已经看到了几个问题,其中提到光标将自动关闭,但我想确保这是真的. …
这是一个有趣的问题,我很震惊,在互联网上没有经常被问到.一旦你启动并运行ContentProvider并学习如何使用它,Android的CursorAdapters非常有用,但由于他们要求将_id字段作为其查询的一部分,所以它们是有限的(没有它就会抛出错误).原因如下:
我的具体问题是我有两个微调器:一个微调器应该包含数据库中唯一的"类别"名称,另一个应该填充所选"类别"的所有数据库条目(类别是列名,在这里).这似乎是一个非常简单的设置,很多程序可能会使用,不是吗?试图实现第一个微调器是我遇到问题的地方.
这是我想要第一个微调器的查询:
SELECT DISTINCT category FROM table;
Run Code Online (Sandbox Code Playgroud)
使此查询在CursorAdapter上引发错误,因为_id列是查询的一部分.将_id列添加到投影自然会返回表的每一行,因为您现在也要求不同的id,并且每个id都是不同的(根据定义).显然,我宁愿每个类别名称只看到一个条目.
我已经实现了一个解决方法,就是简单地进行上面的查询,然后将结果复制到ArrayAdapter中.我这篇文章的原因是看看这个奇怪的小问题是否有一个更优雅的解决方案,并开始讨论我可以做得更好.非常欢迎使用其他实现建议,例如使用不同类型的控件或适配器.
我试图AlphabetIndexer用这样的自定义适配器实现
我的类ContactsCursorAdapter扩展SimpleCursorAdapter和实现SectionIndexer
,我使用a LoaderManager来管理我的适配器的光标,所以我已经覆盖了swapCursor()方法,就像上面示例的第二个答案所示.
public class ContactsCursorAdapter extends SimpleCursorAdapter
implements SectionIndexer{
private LayoutInflater mInflater;
private Context mContext;
private AlphabetIndexer mAlphaIndexer;
public ContactsCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to);
mInflater = LayoutInflater.from(context);
mContext = context;
}
public View getView(final int position, View convertView, ViewGroup parent) {
...
}
@Override
public int getPositionForSection(int section) {
return mAlphaIndexer.getPositionForSection(section);
}
@Override
public int getSectionForPosition(int position) { …Run Code Online (Sandbox Code Playgroud) android adapter simplecursoradapter android-loadermanager android-cursorloader
android ×10
listview ×4
java ×3
adapter ×1
cursor ×1
distinct ×1
multi-select ×1
searchview ×1
sqlite ×1