刷新ViewPager片段无法正常工作 [英] Refresh ViewPager fragment doesn't work properly

查看:76
本文介绍了刷新ViewPager片段无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有三个选项卡,分别包含三个不同的片段以及每个片段的列表视图,看起来像这样:

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中何时可见

这篇关于刷新ViewPager片段无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆