-1
我一直試圖刷新listview
,每當我刪除它的行。我使用BaseAdapter
作爲listview
。我沒有得到如何刷新它。我使用SQLite,同時刷新我也刪除數據庫中的行。如何使用BaseAdapter刷新或更新列表視圖?
public class MainActivity extends Activity {
DataBase md ;
ImageButton ib;
ListView notelist;
int i;
ArrayList<String> titles = new ArrayList<String>();
ArrayList<String> not = new ArrayList<String>();
ArrayList<String> date = new ArrayList<String>();
ArrayList<String> time = new ArrayList<String>();
ArrayList<String> Revtitles = new ArrayList<String>();
ArrayList<String> Revnot = new ArrayList<String>();
ArrayList<String> Revdate = new ArrayList<String>();
ArrayList<String> Revtime = new ArrayList<String>();
DataAdapter adapter;
View view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
md = new DataBase(this);
SQLiteDatabase sd = md.getReadableDatabase();
Cursor c = sd.query(md.TABLE_NAME, null, null, null, null, null, null);
while (c.moveToNext()) {
titles.add(c.getString(0));
not.add(c.getString(1));
date.add(c.getString(2));
time.add(c.getString(3));
}
for (int i = titles.size() - 1; i >= 0; i--) {
Revtitles.add(titles.get(i));
Revnot.add(not.get(i));
Revdate.add(date.get(i));
Revtime.add(time.get(i));
}
notelist = (ListView) findViewById(R.id.listView1);
ib = (ImageButton) findViewById(R.id.imageButton1);
adapter = new DataAdapter(this);
notelist.setAdapter(adapter);
// notelist.setStackFromBottom(true);
notelist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this,Show.class);
i.putExtra("TITLE", Revtitles.get(arg2));
i.putExtra("NOTE", Revnot.get(arg2));
startActivity(i);
finish();
}
});
notelist.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View v,
final int pos, long arg3) {
// TODO Auto-generated method stub
final String st = Revtitles.get(pos);
String st1 = Revnot.get(pos);
AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
ad.setMessage("Are sure you want to delete?");
ad.setCancelable(false);
ad.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
// TODO Auto-generated method stub
//sd.delete(md.TABLE_NAME, md.COL_ROLLNO+"=?", new String[]{st});
//Intent i = new Intent(MainActivity.this,MainActivity.class);
//startActivity(i);
///////PROBLEM LINES///////
SQLiteDatabase sd = md.getWritableDatabase();
sd.delete(md.TABLE_NAME,md.COL_TITLE+"=?", new String[]{st});
Revtitles.remove(pos);
Revnot.remove(pos);
Revdate.remove(pos);
Revtime.remove(pos);
adapter.notifyDataSetChanged();
adapter.notifyDataSetInvalidated();
notelist.setAdapter(adapter);
}
});
ad.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
AlertDialog adl = ad.create();
adl.show();
return true;
}
});
ib.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, Add.class);
startActivity(i);
finish();
}
});
}
class DataAdapter extends BaseAdapter{
private Context con;
LayoutInflater lat = getLayoutInflater();
public DataAdapter(MainActivity mainActivity) {
// TODO Auto-generated constructor stub
this.con = mainActivity;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return titles.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convo, ViewGroup arg2) {
// TODO Auto-generated method stub
convo = lat.inflate(R.layout.mainlist, null);
TextView tit = (TextView)convo.findViewById(R.id.inflatetitle);
TextView datea = (TextView)convo.findViewById(R.id.inflatedate);
String rtitle;
int len = Revtitles.get(position).length();
if (len <= 20){
rtitle = Revtitles.get(position);
}
else {
rtitle = Revtitles.get(position).substring(0, 20) + "...";
}
tit.setText(rtitle);
datea.setText(Revdate.get(position) + "\n" + Revtime.get(position));
view = convo;
return convo;
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
}
return super.onKeyDown(keyCode, event);
}
}
你應該_not_調用'adapter.notifyDataSetInvalidated();',請參閱相關的文檔:「通知所附的觀察員底層數據不再有效或可用。一旦調用此適配器不再有效,不應報告進一步的數據集更改。「 (http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetInvalidated()) – Kai 2014-09-28 13:35:56