【发布时间】:2016-06-23 16:34:42
【问题描述】:
我有三个选项卡,其中包含三个不同的片段,每个片段都有列表视图,它看起来像这样:
当我按下白色按钮时,列表项被添加到 tab2,如果我按下紫色按钮,列表项被添加到 tab3。 Tab3 已刷新,因为 viewPager 具有默认的屏幕外限制 1,因此当我导航到 tab3 时,它被创建并且当时它具有新的 listitem,但 tab2 在应用程序启动时已经创建,所以我需要通过某种方法刷新它。所以我在 tab2 片段中创建了 updateView() 方法,我在 OnPageChangeListener() 上调用该方法它更新视图,但是每次我导航到 tab2 时都会调用它并导致滞后。我想要做的就是删除该列表项目并将其添加到 tab2 并被删除并添加到 tab2 但是当我滑动到 tab2 时我看不到它,就在关闭应用程序后它出现或当 tab2 片段调用 onResume、onCreate...
在后台加载列表项的异步方法:
public class AchievedDreamFragment extends Fragment {
ListView achievedListView;
Activity activity;
ArrayList<AchievedCloud> achievedClouds;
AchievedListAdapter achievedListAdapter;
AchievedActionHandler achievedActionHandler;
private GetAvedTask atask;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = getActivity();
achievedActionHandler = new AchievedActionHandler(activity);
}
public class GetAvedTask extends AsyncTask<Void, Void, <AchievedCloud>> {
private final WeakReference<Activity> activityWeakRef;
public GetAvedTask(Activity context) {
this.activityWeakRef = new WeakReference<Activity>(context);
}
@Override
protected ArrayList<AchievedCloud> doInBackground(Void... arg0) {
Log.e(TAG,"do in background");
//achievedActionHandler = new AchievedActionHandler(activity);
ArrayList<AchievedCloud> dreamList = achievedActionHandler.getaDreams();
return dreamList;
}
@Override
protected void onPostExecute(ArrayList<AchievedCloud> adrmList) {
Log.e(TAG,"on Post execute");
if (activityWeakRef.get() != null
&& !activityWeakRef.get().isFinishing()) {
achievedClouds = adrmList;
if (adrmList != null) {
if (adrmList.size() != 0) {
achievedListAdapter = new AchievedListAdapter(activity,
adrmList);
achievedListView.setAdapter(achievedListAdapter);
achievedListAdapter.notifyDataSetChanged();
}
}
}
}
}
UpdateView() 方法在 asyncTask 所在的同一片段中:
public void updateView() {
atask = new GetAvedTask(activity);
atask.execute((Void) null);
}
viewpager OnPageChangeListener():
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position == 1){
achievedDreamFragment.updateView();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
我也在适配器 getItemPosition POSITION_NONE 上进行了尝试,但它没有解决这个问题我可以尝试什么?
【问题讨论】:
标签: android listview android-fragments android-asynctask