android - 刷新 ViewPager fragment 无法正常工作

标签 android listview android-fragments android-asynctask

我有三个选项卡,其中包含三个不同的 fragment ,每个 fragment 都有 ListView ,它看起来像这样:

enter image description here

当我按下白色按钮时,列表项被添加到 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 上进行了尝试,但它并没有解决这个问题我可以尝试什么?

最佳答案

我不完全理解你想要实现的目标,但我认为你正在寻找这个:

How to determine when Fragment becomes visible in ViewPager

关于android - 刷新 ViewPager fragment 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997228/

相关文章:

android - Tab 内的 ViewPager 无法正确显示项目

java - EditText 在 NestedScrollView 内不可滚动

android - 溢出 :hiden with border-radius on mobile browser

java - listView 中的 addFooterView 给出 ClassCastException

c# - 使用 Josh Smith 的 WPF MVVM 演示应用程序实现 ListView 筛选器

android - 简单对话框中的 ViewPager

java - 递归方法适用于带有控制台的java,但不适用于android

android - 从多选 ListView 返回值

Android: ListView 的设置选择器颜色不起作用

android - 自定义适配器不适用于 fragment 中的 RecyclerView