刷新ViewPager片段无法正常工作 [英] Refresh ViewPager fragment doesn't work properly
问题描述
我有三个选项卡,分别包含三个不同的片段以及每个片段的列表视图,看起来像这样:
I have three tabs which holds three different fragments with listview for each fragment and it looks like this:
当我按下白色按钮时,列表项将添加到tab2中;如果按下紫色按钮,则列表项将添加到tab3中. Tab3刷新是因为viewPager具有默认的屏幕外限制1,因此当我导航到tab3时,它已创建,并且具有新的listitem,但是tab2已在应用程序启动时创建,因此我需要通过某种方法对其进行刷新.所以我在tab2片段中创建了updateView()方法,并在OnPageChangeListener()上调用了该方法,它会更新视图,但是每次导航到tab2都会被调用,这会导致滞后.我要做的就是删除该列表项并将其添加到tab2中,然后将其删除,并将其添加到tab2中,但是当我滑动到tab2时,我看不到它,只是在关闭应用程序后出现,或者当tab2片段调用onResume,onCreate ...
When I'm pressing white button list item is added to tab2 and if I press purple button list item is added to tab3. Tab3 is refreshed because viewPager has default offscreen limit 1 so when I'm navigating to tab3 it is created and on that time it has its new listitem, but tab2 is already created when app starts so I need to refresh it by some method. So I created updateView() method in tab2 fragment and I'm calling that method on OnPageChangeListener() it updates view, but it gets called every time I navigate to tab2 and it causing lag.All I want to do is to delete that list item and add it to tab2 and it gets removed and it is added to tab2 but when I swipe to tab2 I cannot see it, just after closing app it appears or when tab2 fragment calls 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上也尝试过,但是并不能解决我可以尝试的任何想法吗?
I tried as well on adapter getItemPosition POSITION_NONE, but it doesn't fix this any ideas what could I try?
推荐答案
我不完全了解您要实现的目标,但我认为您正在寻找的目标是:
i don't understand fully what you want to achieve but i'm thinkin that you are looking for this:
这篇关于刷新ViewPager片段无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!