Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从列表中删除数据后如何更新列表视图?_Java_Android_Sqlite - Fatal编程技术网

Java 从列表中删除数据后如何更新列表视图?

Java 从列表中删除数据后如何更新列表视图?,java,android,sqlite,Java,Android,Sqlite,我是android新手。我的应用程序中有一个列表视图,其中有一个问题列表,我想在删除任何问题时动态更新该列表。请帮助 public class admin extends Activity { static int itemPosition; ListView lv; List<Question> quesList2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s

我是android新手。我的应用程序中有一个列表视图,其中有一个问题列表,我想在删除任何问题时动态更新该列表。请帮助

public class admin extends Activity {
static int itemPosition;
ListView lv;
List<Question> quesList2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.admin);
    lv=(ListView) findViewById(R.id.listView);
    QuizHelper db = new QuizHelper(this);  // my question bank class
    quesList2 = db.getAllQuestions2();
    int a= quesList2.size();
    String[] testArray = new String[a];
    for (int i = 0; i < testArray.length; i++) {
        testArray[i]=quesList2.get(i).getQUESTION();
    }
    ArrayAdapter adapter = new ArrayAdapter(this,
            android.R.layout.simple_list_item_1,     
    android.R.id.text1,testArray);

    // Assign adapter to ListView
    lv.setAdapter(adapter);
    registerForContextMenu(lv);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1,
                                int position, long arg3) {
            // TODO Auto-generated method stub
            itemPosition     = position;
        }
    });
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,  
ContextMenu.ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, v.getId(), 0, "Delete");//groupId, itemId, order, title
}
@Override
public boolean onContextItemSelected(MenuItem item){
    QuizHelper db = new QuizHelper(this);
    if(item.getTitle()=="Delete"){
     db.deleteDB();
        Toast.makeText(this, "Successfully deleted", 
    Toast.LENGTH_LONG).show();
        lv.invalidateViews();
    }
    else{
        return false;
    }
    return true;
 }

 }
您应该使用

通知附加的观察者基础数据已被删除 已更改,任何反映数据集的视图都应刷新自身

代码

if(item.getTitle()=="Delete"){
 db.deleteDB();
 adapter.notifyDataSetChanged();
}
您应该使用

通知附加的观察者基础数据已被删除 已更改,任何反映数据集的视图都应刷新自身

代码

if(item.getTitle()=="Delete"){
 db.deleteDB();
 adapter.notifyDataSetChanged();
}

无论你在哪里呼叫

 deleteDB() 
方法,调用

adapter.notifyDataSetChanged() 

之后

无论您在哪里呼叫

 deleteDB() 
方法,调用

adapter.notifyDataSetChanged() 

之后,您可以使用适配器。notifyDataSetChanged

但这并不能确保您的数据确实被删除!进行数据库操作时可能出错

一种更干净的方法是设置一个自定义侦听器,并从数据库类通知视图这是一个成功的操作

创建一个接口

public interface DatabaseListener {
    void deleteSuccess();
    void deleteError();
}
指定要通知的侦听器

public class admin extends Activity implements DatabaseListener{
...your codes
//you need to implement the interface methods

@Override
public void deleteSuccess(){
  adapter.notifyDataSetChanged();
  Toast.makeText(this, "Successfully deleted",Toast.LENGTH_LONG).show();
}

@Override
public void deleteError(){
  Toast.makeText(this, "Failed to delete",Toast.LENGTH_LONG).show();
}


}
通知侦听器

protected void deleteDB(){
    dbase = this.getWritableDatabase();
    try {
        dbase.execSQL("DELETE FROM " + TABLE_QUEST + " WHERE " + KEY_ID + " ='"+admin.itemPosition+"'");
        //verify if the data is deleted
        //get the databaseListener object from your Database class constructor.

        databaseListener.deleteSuccess();
    }catch(Exception e){
        databaseListener.deleteError();
    }
}

您可以使用
适配器。notifyDataSetChanged
但这并不能确保您的数据确实被删除!进行数据库操作时可能出错

一种更干净的方法是设置一个自定义侦听器,并从数据库类通知视图这是一个成功的操作

创建一个接口

public interface DatabaseListener {
    void deleteSuccess();
    void deleteError();
}
指定要通知的侦听器

public class admin extends Activity implements DatabaseListener{
...your codes
//you need to implement the interface methods

@Override
public void deleteSuccess(){
  adapter.notifyDataSetChanged();
  Toast.makeText(this, "Successfully deleted",Toast.LENGTH_LONG).show();
}

@Override
public void deleteError(){
  Toast.makeText(this, "Failed to delete",Toast.LENGTH_LONG).show();
}


}
通知侦听器

protected void deleteDB(){
    dbase = this.getWritableDatabase();
    try {
        dbase.execSQL("DELETE FROM " + TABLE_QUEST + " WHERE " + KEY_ID + " ='"+admin.itemPosition+"'");
        //verify if the data is deleted
        //get the databaseListener object from your Database class constructor.

        databaseListener.deleteSuccess();
    }catch(Exception e){
        databaseListener.deleteError();
    }
}

请考虑使用CurryReVIEW而不是ListVIEW。


这是一个很棒的指南,如果你不知道如何使用它:

< P>请考虑使用CurryReVIEW而不是列表视图。
如果你不知道如何使用它,这里有一个很棒的指南:

notifyDataSetChanged()删除后,你也可以使用Recycler视图,它有一个用于项目删除的方法recyclerAdapter.notifyItemRemoved(position);移除后的示例代码NotifyDataSetChanged(),请参阅。您还可以使用Recycler视图,它具有用于移除项目的方法recyclerAdapter.notifyItemRemoved(position);查看示例代码很高兴在这里见到您
Asif vai
tough我正在寻找一些
React
东西。谢谢。@MdFaridUddinKiron很有趣!!世界很小,绝对正确。希望你做得很好。很高兴在这里见到你。如果vai很难,我正在寻找一些
React
的东西。谢谢。@MdFaridUddinKiron很有趣!!世界很小,绝对正确。希望你做得很好。