在android中删除行后如何更新列表视图
我正在使用UI上的长按从本地数据库中删除一行,删除后,该行将自动从用户界面的列表中删除在android中删除行后如何更新列表视图,android,Android,我正在使用UI上的长按从本地数据库中删除一行,删除后,该行将自动从用户界面的列表中删除 public class AllData extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { DotCursorAdapter mAdapter; private ListView lv; Context context = this; private final int LOADER_ID
public class AllData extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {
DotCursorAdapter mAdapter;
private ListView lv;
Context context = this;
private final int LOADER_ID = 860;
public static DatabaseHandler dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lv = (ListView) findViewById(R.id.lists);
dbHelper = new DatabaseHandler(this);
mAdapter = new DotCursorAdapter(this, null, 1);
getSupportLoaderManager().initLoader(LOADER_ID, null, this);
lv.setAdapter(mAdapter);
lv.setTextFilterEnabled(true);
}
@Override
public Loader<Cursor> onCreateLoader(int i, Bundle bundle) {
return new DumbLoader(this);
}
@Override
public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor cursor) {
mAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> cursorLoader) {
mAdapter.swapCursor(null);
}
/**
* DumbLoader sub class
*/
public static class DumbLoader extends CursorLoader {
public DumbLoader(Context context) {
super(context);
}
@Override
public Cursor loadInBackground() {
Cursor c = dbHelper.FetchAllData();
return c;
}
}
public final class DotCursorAdapter extends CursorAdapter {
public DotCursorAdapter(Context context, Cursor cursor, int flags) {
super(context, cursor, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return LayoutInflater.from(context).inflate(R.layout.visitation_activity, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
/**
* Data from the local database
*/
final String id = cursor.getString(cursor.getColumnIndexOrThrow("_id"));
final String date = cursor.getString(cursor.getColumnIndexOrThrow("created_at"));
view.setTag(Long.valueOf(id));
view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
((AllData) mContext).deleteData(((Long) view.getTag()).longValue());
return true;
}
});
}
}
/**
* Delete data and update list view
*/
public void deleteData(long id) {
final long alarmId = id;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Please confirm")
.setTitle("Delete set?")
.setCancelable(true)
.setNegativeButton("Cancel", null)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dbHelper.deleteData(alarmId);
//Refresh the list of the alarms in the adaptor
dbHelper.FetchAllData();
//Notify the adapter the data has changed
mAdapter.notifyDataSetChanged();
}
}).show();
}}
公共类AllData扩展AppCompatActivity实现LoaderManager.LoaderCallbacks{
DotCursorAdapter mAdapter;
私有ListView lv;
上下文=这个;
专用最终整数加载器_ID=860;
公共静态数据库处理程序dbHelper;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
lv=(ListView)findViewById(R.id.lists);
dbHelper=newdatabasehandler(这个);
mAdapter=new DotCursorAdapter(this,null,1);
getSupportLoaderManager().initLoader(LOADER_ID,null,this);
低压设置适配器(mAdapter);
lv.setTextFilterEnabled(真);
}
@凌驾
公共加载器onCreateLoader(inti,Bundle){
返回新的DumbLoader(此);
}
@凌驾
公共void onLoadFinished(加载器游标加载器,游标游标){
mAdapter.swapCursor(光标);
}
@凌驾
public void onLoaderReset(加载器游标加载器){
mAdapter.swapCursor(空);
}
/**
*DumbLoader子类
*/
公共静态类DumbLoader扩展了CursorLoader{
公共DumbLoader(上下文){
超级(上下文);
}
@凌驾
公共游标loadInBackground(){
游标c=dbHelper.FetchAllData();
返回c;
}
}
公共最终类DotCursorAdapter扩展了CursorAdapter{
公共点光标或适配器(上下文上下文、光标、int标志){
超级(上下文,游标,0);
}
@凌驾
公共视图newView(上下文上下文、光标、视图组父对象){
返回LayoutFlater.from(上下文)。充气(R.layout.Visition_活动,父项,false);
}
@凌驾
公共void bindView(视图、上下文上下文、光标){
/**
*来自本地数据库的数据
*/
最后一个字符串id=cursor.getString(cursor.getColumnIndexOrThrow(“_id”);
最终字符串日期=cursor.getString(cursor.getColumnIndexOrThrow(“created_at”);
view.setTag(Long.valueOf(id));
view.setOnLongClickListener(新视图.OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图){
((AllData)mContext.deleteData((Long)view.getTag()).longValue());
返回true;
}
});
}
}
/**
*删除数据并更新列表视图
*/
公共无效删除数据(长id){
最终长报警id=id;
AlertDialog.Builder=新建AlertDialog.Builder(此);
builder.setMessage(“请确认”)
.setTitle(“删除集?”)
.setCancelable(真)
.setNegativeButton(“取消”,null)
.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
dbHelper.deleteData(alarmId);
//刷新适配器中的报警列表
dbHelper.FetchAllData();
//通知适配器数据已更改
mAdapter.notifyDataSetChanged();
}
}).show();
}}
使用上面的代码,我可以从本地数据库中删除数据,但它不会从用户界面中删除删除的行,除非我刷新页面
是否有一种方法可以在删除后自动从列表视图中删除删除的行。提前感谢。使用此
getSupportLoaderManager().restartLoader(0,null,AllData.this)代码>而不是mAdapter.notifyDataSetChanged()
要刷新列表项,请使用此getSupportLoaderManager().restartLoader(0,null,AllData.this)代码>而不是mAdapter.notifyDataSetChanged()
刷新列表项或者您可以使用intent并保持源活动和目标活动相同。。。。。并在删除行后使用此行
Intent i = new Intent(sourceActivity.this,targetActivity.this);
startActivity(i);
sourceActivity.finish();
或者,您可以使用intent并保持源活动和目标活动相同。。。。。并在删除行后使用此行
Intent i = new Intent(sourceActivity.this,targetActivity.this);
startActivity(i);
sourceActivity.finish();
您必须传递新数据并调用notifyDataSetChanged(),您必须传递新数据并调用notifyDataSetChanged(),我得到带红色下划线的“this”,这就是我得到的错误错误:(257,50)错误:类LoaderManager中的方法restartLoader无法应用于给定类型;必需:int,Bundle,LoaderCallbacks找到:int,,原因:不存在类型变量D的实例,因此参数类型符合形式参数类型LoaderCallbacks,其中D是类型变量:D扩展方法restartLoader(int,Bundle,LoaderCallbacks)中声明的对象。
将其更改为getSupportLoaderManager().restartLoader(0,null,AllData.this);我得到带红色下划线的“this”,这是我得到的错误错误:(257,50)错误:类LoaderManager中的方法restartLoader无法应用于给定类型;必需:int,Bundle,LoaderCallbacks找到:int,,原因:没有类型变量的实例D的存在使得参数类型符合形式参数类型LoaderCallbacks,其中D是一个类型变量:D扩展方法restartLoader(int,Bundle,LoaderCallbacks)中声明的对象
将其更改为getSupportLoaderManager().restartLoader(0,null,AllData.this);