Java 从列表中删除数据后如何更新列表视图?
我是android新手。我的应用程序中有一个列表视图,其中有一个问题列表,我想在删除任何问题时动态更新该列表。请帮助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
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很有趣!!世界很小,绝对正确。希望你做得很好。