在android中删除行后如何更新列表视图

在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

我正在使用UI上的长按从本地数据库中删除一行,删除后,该行将自动从用户界面的列表中删除

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);