我正在尝试更新由两个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");
}
}
答案 0 :(得分:0)
好的解决了......我的片段正在加载数据的同一个Activity中运行,所以我只是在MainActivity中创建了getter和setter,并通过
在所需的片段中访问它们String[] titles =(MainActivity) getActivity()).getTitlesArray();
String[] text=(MainActivity) getActivity()).getTextArray();
无论我做什么尝试用
设置Bundlebundle.putStringArray(TITLES,titles);
不起作用。应该使用parceable / serializable类但不尝试...