我有三个选项卡,其中包含三个不同的 fragment ,每个 fragment 都有 ListView ,它看起来像这样:
当我按下白色按钮时,列表项被添加到 tab2,如果我按下紫色按钮,列表项被添加到 tab3。 Tab3 被刷新,因为 viewPager 有默认的屏幕外限制 1,所以当我导航到 tab3 时,它被创建,那时它有它的新列表项,但 tab2 已经在应用程序启动时创建,所以我需要通过某种方法刷新它。所以我在 tab2 fragment 中创建了 updateView() 方法,我在 OnPageChangeListener() 上调用该方法它更新 View ,但每次我导航到 tab2 时都会调用它并导致延迟。我想要做的就是删除该列表item 并将其添加到 tab2 并且它被删除并添加到 tab2 但是当我滑动到 tab2 我看不到它,就在关闭应用程序之后它出现或者当 tab2 fragment 调用 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() 方法在同一 fragment 中,其中 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 - 刷新 ViewPager fragment 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997228/