我有一个带有列表视图的MainActivity。
在此活动中是private void showList()
,它查询我的所有数据库并在列表视图中显示它。
我有另一个公共课"同步"它将http帖子发送到我的MYSQL数据库,得到结果并将其写入android数据库。
我想知道,在主要活动的每个简历中,公共类Sync将调用并在完成主活动的列表视图时应该刷新。
在MainActivity中,我称之为:@Override
public void onResume() {
super.onResume();
new Sync.SyncMYSQL(context).execute();
}
这是Sync Class:
public class Sync {
// MYSQL => Database
static class SyncMYSQL extends AsyncTask<String, String, String> {
Context context;
public SyncMYSQL(Context c) {
this.context = c;
}
@Override
protected String doInBackground(String... params) {
try {
// DO SOMETHING
} catch (MalformedURLException e) {
Log.e("-->", Log.getStackTraceString(e));
} catch (IOException e) {
Log.e("-->", Log.getStackTraceString(e));
}
return null;
}
protected void onPostExecute(String result) {
// DO SOMETHING
}
}
MainActivity
public class OverviewData extends Fragment {
private View FragementView;
DatabaseHandler dbHandler;
ListView ListView;
DatabaseListAdapter databaseListAdapter;
Context context;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
context = getContext();
FragementView = inflater.inflate(R.layout.overview, container, false);
ListView = (ListView) FragementView.findViewById(R.id.listView);
dbHandler = new DatabaseHandler(getActivity());
showList();
return FragementView;
}
@Override
public void onResume() {
super.onResume();
new Sync.SyncMYSQL(context, 0).execute();
}
private void showList() {
ArrayList<DatabaseListItems> databaseList = new ArrayList<>();
databaseList.clear();
String query = "SELECT * FROM " + DatabaseHelper.DATABASE_TABLE;
Cursor c1 = dbHandler.selectQuery(query);
if (c1 != null && c1.getCount() != 0) {
if (c1.moveToFirst()) {
do {
DatabaseListItems databaseListItems = new DatabaseListItems();
databaseListItems.setIdentifier(c1.getString(c1.getColumnIndex(DatabaseHelper.COLUMN_ID)));
databaseList.add(databaseListItems);
} while (c1.moveToNext()) ;
}
c1.close();
}
databaseListAdapter = new DatabaseListAdapter(getActivity(), databaseList);
ListView.setAdapter(databaseListAdapter);
}
}
答案 0 :(得分:0)
对于listView适配器 -
首先设置数据
adapter=new Adapter(context,newDataList);
adapter.notifyDatasetChanged();
答案 1 :(得分:0)
每次在onResume
(因为,无论何时打开和关闭活动,或从上一个活动回来时加载数据)而不是onStart/onCreate
中的调用同步方法,都不好刷新列表数据(在onCreate
结束时)。
刷新listview使用界面。在onPostExecute
中调用接口方法之后,在activity中实现接口并在接口方法中添加下面的代码if(databaseListAdapter != null)
databaseListAdapter.notifyDataSetChanged();
答案 2 :(得分:0)
使用游标加载器。数据库更改后,光标加载器将调用 onLoadFinished(),您可以在其中更新列表视图。
初始化加载程序:
getLoaderManager().initLoader(1, null, this);
在你的onResume()中重新启动它:
getLoaderManager().restartLoader(1, null, this);
在onDetach()/ onDestroy()中将其销毁:
getLoaderManager().destroyLoader(1);
使您的类实现: LoaderManager.LoaderCallbacks 你必须覆盖它的三个主要方法。 onLoadFinished()将帮助您更新UI /列表视图。