通过AsyncTask或IntentService更新ListView

时间:2015-07-05 21:52:58

标签: android-listview android-asynctask

我正在尝试更新由两个String Arrays提供的自定义ListView:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getArguments() != null) {
        mParam1 = getArguments().getStringArray(ARG_PARAM1);
        mParam2 = getArguments().getStringArray(ARG_PARAM2);
    }


    setupListView();

}

private void setupListView() {
    listItemList = new ArrayList();
    if (mParam1 != null && mParam2 != null && mParam1.length == mParam2.length) {
        for (int i = 0; i < mParam1.length; i++) {
            listItemList.add(new MyListItem(mParam1[i], (mParam2[i]).substring(0, 75) + "..."));
        }
    } else {
        listItemList.add(new MyListItem("Loading...", "Swipe Down for Update"));
    }

    mAdapter = new MyListAdapter(getActivity(), listItemList);
}

mParam1和mParam2是由MainActivity中的XML解析器(IntentService)类提取的值,如果需要,我可以显示它。

现在,如果我要禁食,并且mPara1和mPara2为空,则不会显示任何ListView。现在我想通过一些AsyncTask或IntentService来解决这个问题。我尝试过AsyncTask,它根本不起作用。我试过了notifyDataSetChanged(),但也没用......

现在,我怎么能解决这个问题....

使用AsyncTask我遇到的问题是我不知道如何正确地将两个数组传递给publishProgress()

这就是我的AsyncTask的样子:

 class UpdateListView extends AsyncTask<Void, String, Void> {


        private MyListAdapter adapter;
        private ArrayList listItemList;

        @Override
        protected void onPreExecute() {
            adapter = (MyListAdapter) mListView.getAdapter();
        }

        @Override
        protected Void doInBackground(Void... params) {
            for (String item1 : mParam1) {
                publishProgress(item1);
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(String... values) {
            adapter.add(new MyListItem(values[0], values[1]));
        }

        @Override
        protected void onPostExecute(Void result) {
            Log.d("onPostExecute", "Added successfully");
        }
    }

1 个答案:

答案 0 :(得分:0)

好的解决了......我的片段正在加载数据的同一个Activity中运行,所以我只是在MainActivity中创建了getter和setter,并通过

在所需的片段中访问它们
String[] titles =(MainActivity) getActivity()).getTitlesArray();
String[] text=(MainActivity) getActivity()).getTextArray();

无论我做什么尝试用

设置Bundle
bundle.putStringArray(TITLES,titles);

不起作用。应该使用parceable / serializable类但不尝试...