当前位置: 首页 > 知识库问答 >
问题:

如何从ViewPager的页面升级ViewPager

谢夜洛
2023-03-14

我把一切都解决了,但有一个问题。我有4个不同的碎片。其中一个包含ListView。当我单击ListView中的一项时,更改全局变量guestid。如果然后返回到其他片段,这些它们应该被改变。因为他们使用这个变量作为参数。但它们不会改变。

public class Guest extends Fragment {
...
    private ViewPager pager;
    private MyPagerAdapter adapter;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.guest, null);

...

        if (InternetResiver.isOnline(getActivity())) {
            setData();
        } else {
            AlertDialog alert = InternetResiver.getAlertDialog(getActivity());
            alert.show();
        }
        return v;
    }

    public void startNewTread(String newId) {
        guestId = newId;
        Log.d("usernewid",newId);
        setData();
    }

    private class MyPagerAdapter extends FragmentPagerAdapter {
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int pos) {
            switch(pos) {
                case 0: return Folio.newInstance(guestId,hotel,room);
                case 1: return BalanceDetail.newInstance(guestId,hotel);
                case 2: return History.newInstance(guestId,hotel);
                case 3: return Record.newInstance(guestId,hotel,room);
                default: return Folio.newInstance(guestId,hotel,room);
            }
        }

        @Override
        public int getCount() {
            return 4;
        }       
    }

    public void setData() {
        String link = String.format(......., guestId, hotel);
        new MyAsincTask(getActivity()){........}.execute(link);
    }
}

我的碎片

public class Folio extends Fragment {
    private ArrayList<FolioBean> folioBeans;
    private TableLayout tableFolio;
    private String guestId;
    private String hotel;
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.folio, null);
         guestId = getArguments().getString("guestid");
         hotel = getArguments().getString("hotel");

        folioBeans = new ArrayList<>();
        tableFolio = (TableLayout) v.findViewById(R.id.tableFolio);
        if (InternetResiver.isOnline(getActivity())) {
            setData();
        } else {
            AlertDialog alert = InternetResiver.getAlertDialog(getActivity());
            alert.show();
        }
        return v;

    }

    public static Folio newInstance(String guestid,String hotel,String room) {

        Folio f = new Folio();
        Bundle b = new Bundle();
        b.putString("guestid", guestid);
        b.putString("hotel", hotel);
        b.putString("room", room);

        f.setArguments(b);

        return f;
    }

    public void setData() {
        String link = String.format(........., guestId, hotel);
        new MyAsincTask(getActivity()){........}.execute(link);
    }
}

其他片段使用相同的guestid加载

共有1个答案

史弘致
2023-03-14

这是因为ViewPager缓存了片段。您需要使用FragmentStatePagerAdapterFragmentPagerAdapter,并在更改Guestid后调用NotifyDataSetChanged(),然后重写

在PagerAdapter中重写getItemPosition,如下所示:

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
} 

参见类似问题

 类似资料:
  • 问题内容: 当我使用Homebrew()安装OpenCV时,每当运行以下命令进行测试时,都会遇到此问题: 我试图升级NumPy,但这很令人困惑: 当我运行brew升级NumPy时,出现了以下问题: 当我卸载它时: 我已经关注了这个问题,并从Mac中删除了Anaconda。 但是什么都没有改变。如何将NumPy版本链接到OpenCV? 问题答案: 因为我们在系统中有两个NumPy安装。一个由Home

  • 我必须向用户显示一组火车票,所以我使用了一个ViewPager,其中每个页面包含一张票。这个ViewPager有填充,允许看到下一个/上一个标签的一小部分,同时在中间显示聚焦的标签。 但我想实现的是,当我按下一个工单页面时,我希望它能顺利地扩展到“全屏”。我不知道在这种情况下使用ViewPager是否是更好的解决方案,因为我正在扩展视图页面管理器中片段内部的内容,而“扩展的票证”是另一种活动。 我

  • 介绍 本文档提供了从 Vant 2 到 Vant 3 的升级指南。 升级步骤 1. 升级 Vue 3 Vant 3 是基于 Vue 3 开发的,在使用 Vant 3 前,请将项目中的 Vue 升级到 3.0 以上版本。 2. 处理不兼容更新 Vant 2 到 Vant 3 存在一些不兼容更新,请仔细阅读下方的不兼容更新内容,并依次处理。 不兼容更新 组件命名调整 GoodsAction 商品导航组

  • 如果你正在运行Gogs 0.9.146以下版本,你可以平滑的升级到Gitea。该升级需要如下的步骤: 停止 Gogs 的运行 拷贝 Gogs 的配置文件 custom/conf/app.ini 到 Gitea 的相应位置。 拷贝 Gitea 的 options/ 到 Home 目录下。 如果你还有更多的自定义内容,比如templates和localization文件,你需要手工合并你的修改到 Gi

  • Symfony 2.7于2015年4月30日发布,是继2.3版本之后的当前LTS(长期支持)版本。Symfony 2.3的这些版本的维护将于2016年5月结束,Symfony 2.7的维护将于2018年5月结束。两个版本的安全补丁将在维护结束后的一年内发布。 正如Massimiliano Arione在公告评论中所建议的那样,从Symfony 2.3升级到2.7需要做哪些更改,而无需检查所有次要升