在活动中调用公共类和刷新列表视图

时间:2016-05-27 08:30:04

标签: java android

我有一个带有列表视图的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);
    }
}

3 个答案:

答案 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 /列表视图。