タブで作ったアプリがあります。1つのタブは、メソッドget_data()(別のクラスから呼び出される)を使用して、dbからデータを取得します。
正常に動作しますが、別のタブから行われた変更、または識別されたタブで行われた変更(DELETEやUPDATEのように変更された)は表示されません。例:
dbから取得したデータを含むタブ(リストビューを使用)に移動し、レコードを削除してから、別のタブに移動して、リストを含むタブに戻ります。削除された行が表示されます。アプリを閉じて再度開くと、変更が表示されます。
「データベースをリロードする」方法はありますか?
これがコード(view.class)、タブからのリーダーです:
public class Bookmarks extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.bookmarks);
final Database info=new Database(this);
final Timer t = new Timer();
info.open();
String data=info.getData();
final String[] data_array = data.split(",");
info.close();
final ListView listView1 = (ListView) findViewById(R.id.list_mia);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, data_array);
listView1.setAdapter(adapter);
final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
listView1.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id){
if(data_array[position].startsWith("http://")){
Uri uri=Uri.parse((String) data_array[position]);
Intent intent=new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}else{
alertDialog.setTitle("Content");
alertDialog.setMessage(data_array[position]);
alertDialog.setIcon(R.drawable.ic_launcher);
alertDialog.show();
}
}
});
listView1.setOnItemLongClickListener(new OnItemLongClickListener(){
@Override
public boolean onItemLongClick(AdapterView<?> parent, View v, final int position, long id) {
builder.setTitle("Delete")
.setMessage("Are you sure to remove this entry?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
info.open();
info.deleteEntry(position+1);
info.close();
alertDialog.setTitle("Delete");
alertDialog.setMessage("Item deleted successfully!");
alertDialog.setIcon(R.drawable.ic_launcher);
alertDialog.show();
t.schedule(new TimerTask() {
public void run() {
alertDialog.dismiss();
t.cancel();
}
},2000);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {}
})
.show();
return false;
}
});
}
}
および呼び出されるメソッド(db.class内):
public String getData() {
String[] columns=new String[]{KEY_ROWID,KEY_CONTENUTO};
Cursor c=ourDatabase.query(DATABASE_TABLE,columns,null,null,null,null,"id");
String result="";
int iRow=c.getColumnIndex(KEY_ROWID);
int iName=c.getColumnIndex(KEY_CONTENUTO);
for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
result=result+c.getString(iName)+',';
}
result=result.substring(0, result.length()-1);
return result;
}
誰かが私を助けることができますか?