SherlockListFrgament与Commonware Loaderex,can';更新数据 公共类NewFriendsListFragment扩展了SherlockListFragment实现 LoaderManager.LoaderCallbacks{ 国际月变、日变; 对话; int pos; 选中TextView ctv_名称; 私有SimpleCursorAdapter mAdapter=null; 私有SQLiteCursorLoader加载器=null; 串滤波器; 私有静态处理程序responseHandler; 布尔加载=假; @凌驾 已创建ActivityState上的公共无效(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); //还有一些东西。。。 设置选项菜单(真); mAdapter=new FriendListSCA(getSherlockActivity().getApplicationContext(), R.layout.friend_项,null,null,null,null,null,NAME), 新字符串[]{NAME,MONTH,UID},新int[]{R.id.NAME,R.id.info,R.id.profile_pic}); setListAdapter(mAdapter); SetListShowed(假); registerForContextMenu(getListView()); getLoaderManager().initLoader(0,null,this); responseHandler=新处理程序() { //处理程序代码 }; } 公共加载器onCreateLoader(int-loaderId,Bundle-args){ //加载器代码 返回(装载机); } public void onLoadFinished(加载器,光标){ mAdapter.changeCursor(游标); //展示列表 如果(isResumed()){ SetListShowed(真); }否则{ SetListShownAnimation(真); } } 公共void onLoaderReset(加载器){ mAdapter.changeCursor(空); } @凌驾 公共布尔值onContextItemSelected(android.view.MenuItem项){ AdapterContextMenuInfo信息; 试一试{ info=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); }catch(ClassCastException e){ 返回false; } 位置=信息位置; 开关(item.getItemId()){ 案例R.id.edit_项目: 显示_对话框(); 返回true; } 返回(super.onOptionsItemSelected(item)); } @凌驾 public void onListItemClick(列表视图l、视图v、最终整数位置、长id){ Log.e(“onListItemClick”、“insideonListItemClick”); ContentValues cv=新的ContentValues(); //更多代码 update(表名称包括,cv,_ID+“=?”,新字符串[]{Integer.toString(position)}); } 私有类FriendListSCA扩展了SimpleCursorAdapter { public FriendListSCA(上下文、int布局、游标c、, 字符串[]从,整数[]到){ super(上下文、布局、c、from、to、0); setViewBinder(新的FriendsListDataViewBinder()); } } 公共类FriendsListDataViewBinder实现SimpleCursorAdapter.ViewBinder { //_ID+”、“+UID+”、“+NAME+”、“+MONTH+”、“+DAY+”、“+WISH @凌驾 公共布尔setViewValue(视图、光标c、int-columnIndex) { 开关(view.getId()) { 案例R.id.name: CheckedTextView ctv=(CheckedTextView)视图; ctv.setText(c.getString(2)); 如果(c.getInt(5)==0 | | c.getInt(4)=-1) { ctv.setPaintFlags(ctv.getPaintFlags()| Paint.STRIKE_-THRU_-TEXT_-FLAG); ctv.setChecked(假); } 其他的 { ctv.setPaintFlags(ctv.getPaintFlags()&(~Paint.STRIKE_-THRU_-TEXT_-FLAG)); ctv.setChecked(真); } 返回true; 案例R.id.info: 如果(c.getInt(4)!=-1) { (TextView)view.setText(Utility.MONTH_NAME[c.getInt(3)-1]+“”+Integer.toString(c.getInt(4)); } 其他的 { ((文本视图)视图).setText(“点击并按住以手动输入”); } 返回true; 案例R.id.profile\u图片: 如果(!已加载) 返回true; ((ImageView)视图).setImageBitmap(Utility.model.getImage( Long.toString(c.getLong(1)),getURL(c.getLong(1)); 返回true; } 返回false; } } 专用void show_对话框() { //日期选择器代码 好的。setOnClickListener(新建按钮。OnClickListener(){ @凌驾 公共void onClick(视图v) { ContentValues cv=新的ContentValues(); cv.put(月、月变化); cv.put(日、日变化); update(表名称包括,cv,_ID+“=?”,新字符串[]{Integer.toString(pos)}); //getLoaderManager().restartLoader(0,null,NewFriendsListFragment.this); //我试着调用重新启动加载程序,但没有,当我检查时 //结果是sqlite数据库没有被更新 responseHandler.sendEmptyMessage(1);//只是取消对话框 } }); dialog.show(); } @凌驾 创建选项菜单(菜单菜单,菜单充气机){ //放置一个用于搜索的操作栏项。 MenuItem item=menu.add(“搜索”); 设置图标(android.R.drawable.ic\u菜单\u搜索); item.setShowAsAction(菜单项始终显示为动作); View searchView=SearchViewCompat.newSearchView(getActivity()); if(searchView!=null){ SearchViewCompat.setOnQueryTextListener(searchView, 新OnQueryTextListenerCompat(){ @凌驾 公共布尔值onQueryTextChange(字符串filtext){ mCurFilter=!TextUtils.isEmpty(filtext)?filtext:null; getLoaderManager().restartLoader(0,null,NewFriendsListFragment.this); 返回true; } }); item.setActionView(searchView); } } @凌驾 公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){ //TODO自动生成的方法存根 } }
我使用ActionBar Sherlock库中的SherlockListFragment来显示一个使用Commonware Loaderex sqlite游标加载程序的列表,evrything似乎工作正常,姓名、生日和个人资料图片都显示正常,但我似乎无法使用loader.update(…)更新表中的任何数据,我叫它的时候什么也没发生。 怎么了?您有:SherlockListFrgament与Commonware Loaderex,can';更新数据 公共类NewFriendsListFragment扩展了SherlockListFragment实现 LoaderManager.LoaderCallbacks{ 国际月变、日变; 对话; int pos; 选中TextView ctv_名称; 私有SimpleCursorAdapter mAdapter=null; 私有SQLiteCursorLoader加载器=null; 串滤波器; 私有静态处理程序responseHandler; 布尔加载=假; @凌驾 已创建ActivityState上的公共无效(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); //还有一些东西。。。 设置选项菜单(真); mAdapter=new FriendListSCA(getSherlockActivity().getApplicationContext(), R.layout.friend_项,null,null,null,null,null,NAME), 新字符串[]{NAME,MONTH,UID},新int[]{R.id.NAME,R.id.info,R.id.profile_pic}); setListAdapter(mAdapter); SetListShowed(假); registerForContextMenu(getListView()); getLoaderManager().initLoader(0,null,this); responseHandler=新处理程序() { //处理程序代码 }; } 公共加载器onCreateLoader(int-loaderId,Bundle-args){ //加载器代码 返回(装载机); } public void onLoadFinished(加载器,光标){ mAdapter.changeCursor(游标); //展示列表 如果(isResumed()){ SetListShowed(真); }否则{ SetListShownAnimation(真); } } 公共void onLoaderReset(加载器){ mAdapter.changeCursor(空); } @凌驾 公共布尔值onContextItemSelected(android.view.MenuItem项){ AdapterContextMenuInfo信息; 试一试{ info=(AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); }catch(ClassCastException e){ 返回false; } 位置=信息位置; 开关(item.getItemId()){ 案例R.id.edit_项目: 显示_对话框(); 返回true; } 返回(super.onOptionsItemSelected(item)); } @凌驾 public void onListItemClick(列表视图l、视图v、最终整数位置、长id){ Log.e(“onListItemClick”、“insideonListItemClick”); ContentValues cv=新的ContentValues(); //更多代码 update(表名称包括,cv,_ID+“=?”,新字符串[]{Integer.toString(position)}); } 私有类FriendListSCA扩展了SimpleCursorAdapter { public FriendListSCA(上下文、int布局、游标c、, 字符串[]从,整数[]到){ super(上下文、布局、c、from、to、0); setViewBinder(新的FriendsListDataViewBinder()); } } 公共类FriendsListDataViewBinder实现SimpleCursorAdapter.ViewBinder { //_ID+”、“+UID+”、“+NAME+”、“+MONTH+”、“+DAY+”、“+WISH @凌驾 公共布尔setViewValue(视图、光标c、int-columnIndex) { 开关(view.getId()) { 案例R.id.name: CheckedTextView ctv=(CheckedTextView)视图; ctv.setText(c.getString(2)); 如果(c.getInt(5)==0 | | c.getInt(4)=-1) { ctv.setPaintFlags(ctv.getPaintFlags()| Paint.STRIKE_-THRU_-TEXT_-FLAG); ctv.setChecked(假); } 其他的 { ctv.setPaintFlags(ctv.getPaintFlags()&(~Paint.STRIKE_-THRU_-TEXT_-FLAG)); ctv.setChecked(真); } 返回true; 案例R.id.info: 如果(c.getInt(4)!=-1) { (TextView)view.setText(Utility.MONTH_NAME[c.getInt(3)-1]+“”+Integer.toString(c.getInt(4)); } 其他的 { ((文本视图)视图).setText(“点击并按住以手动输入”); } 返回true; 案例R.id.profile\u图片: 如果(!已加载) 返回true; ((ImageView)视图).setImageBitmap(Utility.model.getImage( Long.toString(c.getLong(1)),getURL(c.getLong(1)); 返回true; } 返回false; } } 专用void show_对话框() { //日期选择器代码 好的。setOnClickListener(新建按钮。OnClickListener(){ @凌驾 公共void onClick(视图v) { ContentValues cv=新的ContentValues(); cv.put(月、月变化); cv.put(日、日变化); update(表名称包括,cv,_ID+“=?”,新字符串[]{Integer.toString(pos)}); //getLoaderManager().restartLoader(0,null,NewFriendsListFragment.this); //我试着调用重新启动加载程序,但没有,当我检查时 //结果是sqlite数据库没有被更新 responseHandler.sendEmptyMessage(1);//只是取消对话框 } }); dialog.show(); } @凌驾 创建选项菜单(菜单菜单,菜单充气机){ //放置一个用于搜索的操作栏项。 MenuItem item=menu.add(“搜索”); 设置图标(android.R.drawable.ic\u菜单\u搜索); item.setShowAsAction(菜单项始终显示为动作); View searchView=SearchViewCompat.newSearchView(getActivity()); if(searchView!=null){ SearchViewCompat.setOnQueryTextListener(searchView, 新OnQueryTextListenerCompat(){ @凌驾 公共布尔值onQueryTextChange(字符串filtext){ mCurFilter=!TextUtils.isEmpty(filtext)?filtext:null; getLoaderManager().restartLoader(0,null,NewFriendsListFragment.this); 返回true; } }); item.setActionView(searchView); } } @凌驾 公共视图单击(AdapterView arg0、视图arg1、整型arg2、长型arg3){ //TODO自动生成的方法存根 } },android,sqlite,actionbarsherlock,android-cursorloader,commonsware-cwac,Android,Sqlite,Actionbarsherlock,Android Cursorloader,Commonsware Cwac,我使用ActionBar Sherlock库中的SherlockListFragment来显示一个使用Commonware Loaderex sqlite游标加载程序的列表,evrything似乎工作正常,姓名、生日和个人资料图片都显示正常,但我似乎无法使用loader.update(…)更新表中的任何数据,我叫它的时候什么也没发生。 怎么了?您有: public class NewFriendsListFragment extends SherlockListFragment implemen
public class NewFriendsListFragment extends SherlockListFragment implements
LoaderManager.LoaderCallbacks<Cursor> {
int monthchange, daychange;
Dialog dialog;
int pos;
CheckedTextView ctv_name;
private SimpleCursorAdapter mAdapter=null;
private SQLiteCursorLoader loader=null;
String mCurFilter;
private static Handler responseHandler;
boolean loaded=false;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//some more stuff...
setHasOptionsMenu(true);
mAdapter = new FriendListSCA(getSherlockActivity().getApplicationContext(),
R.layout.friend_item, null,null, null, null, null, NAME),
new String[]{NAME,MONTH,UID}, new int[]{R.id.name,R.id.info,R.id.profile_pic});
setListAdapter(mAdapter);
setListShown(false);
registerForContextMenu(getListView());
getLoaderManager().initLoader(0, null, this);
responseHandler = new Handler()
{
//handler code
};
}
public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
//loader code
return(loader);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
mAdapter.changeCursor(cursor);
// Showin List
if (isResumed()) {
setListShown(true);
} else {
setListShownNoAnimation(true);
}
}
public void onLoaderReset(Loader<Cursor> loader) {
mAdapter.changeCursor(null);
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
AdapterContextMenuInfo info;
try {
info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
} catch (ClassCastException e) {
return false;
}
pos=info.position;
switch (item.getItemId()) {
case R.id.edit_item:
show_dialog();
return true;
}
return(super.onOptionsItemSelected(item));
}
@Override
public void onListItemClick(ListView l, View v, final int position, long id) {
Log.e("onListItemClick","Inside onListItemClick");
ContentValues cv= new ContentValues();
//MORE CODE
loader.update(TABLE_NAME_INCLUDE, cv, _ID+" = ?", new String[]{Integer.toString(position)});
}
private class FriendListSCA extends SimpleCursorAdapter
{
public FriendListSCA(Context context, int layout, Cursor c,
String[] from, int[] to) {
super(context, layout, c, from, to,0);
setViewBinder(new FriendsListDataViewBinder());
}
}
public class FriendsListDataViewBinder implements SimpleCursorAdapter.ViewBinder
{
//_ID + "," + UID+","+NAME+","+MONTH+","+DAY+","+WISH
@Override
public boolean setViewValue(View view, Cursor c, int columnIndex)
{
switch (view.getId())
{
case R.id.name:
CheckedTextView ctv= (CheckedTextView)view;
ctv.setText(c.getString(2));
if(c.getInt(5)==0 || c.getInt(4)==-1)
{
ctv.setPaintFlags(ctv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
ctv.setChecked(false);
}
else
{
ctv.setPaintFlags(ctv.getPaintFlags() & (~ Paint.STRIKE_THRU_TEXT_FLAG));
ctv.setChecked(true);
}
return true;
case R.id.info:
if(c.getInt(4)!=-1)
{
((TextView)view).setText(Utility.MONTH_NAME[c.getInt(3)-1] + " " + Integer.toString(c.getInt(4)));
}
else
{
((TextView)view).setText("Tap and hold to manually enter");
}
return true;
case R.id.profile_pic:
if(!loaded)
return true;
((ImageView)view).setImageBitmap(Utility.model.getImage(
Long.toString( c.getLong(1) ), getURL(c.getLong(1)) ));
return true;
}
return false;
}
}
private void show_dialog()
{
//DATE PICKER CODE
okay.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v)
{
ContentValues cv=new ContentValues();
cv.put(MONTH, monthchange);
cv.put(DAY, daychange);
loader.update(TABLE_NAME_INCLUDE, cv, _ID+" = ?" , new String[]{Integer.toString(pos)});
//getLoaderManager().restartLoader(0, null, NewFriendsListFragment.this);
//I tried calling restart loader, but nothing, when I checked
//it turned out the sqlite database wasn't being updated
responseHandler.sendEmptyMessage(1); //just dismisses dialog
}
});
dialog.show();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Place an action bar item for searching.
MenuItem item = menu.add("Search");
item.setIcon(android.R.drawable.ic_menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
View searchView = SearchViewCompat.newSearchView(getActivity());
if (searchView != null) {
SearchViewCompat.setOnQueryTextListener(searchView,
new OnQueryTextListenerCompat() {
@Override
public boolean onQueryTextChange(String filtext) {
mCurFilter = !TextUtils.isEmpty(filtext) ? filtext : null;
getLoaderManager().restartLoader(0, null, NewFriendsListFragment.this);
return true;
}
});
item.setActionView(searchView);
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
}
}
这很可能是:<
loader.update(TABLE_NAME_INCLUDE, cv, _ID+" = ?", new String[]{Integer.toString(position)});
loader.update(TABLE_NAME_INCLUDE, cv, _ID+" = ?", new String[]{Integer.toString(id)});