在Android中加载viewpager的顺序

用户名

想象一下,有一个分页为4页的viewpager,第1和第2页存储了edittext,第三个需要显示从第1页和第2页输入的数据。

问题是,如果我像这样创建自定义适配器,则viewpager会预先加载上一页和下一页:

定制适配器

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        rootView = (LinearLayout) LayoutInflater.from(ctx).inflate(pages[position], null);

        if (position == 0) {
            form1(rootView);
        } else {
            form2(rootView);
        }

        ((ViewPager)container).addView(rootView);
        return rootView;
    }

示例函数形式2

private void form2(View rootView){
    TextView previous_page = (TextView) rootView.findViewById(R.id.previous_page);
    TextView next_page = (TextView) rootView.findViewById(R.id.next_page);

    final EditText type = (EditText) rootView.findViewById(R.id.edit_type);
    final EditText amount = (EditText) rootView.findViewById(R.id.edit_amount);
    final Spinner period = (Spinner) rootView.findViewById(R.id.edit_period);
    final EditText name = (EditText) rootView.findViewById(R.id.edit_name);
    final EditText phone_no = (EditText) rootView.findViewById(R.id.edit_phone_no);
    final EditText email = (EditText) rootView.findViewById(R.id.edit_email);

    previous_page.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            viewPager.setCurrentItem(0, true);
            top_bar.setImageResource(R.drawable.form_1_header);
        }
    });

    next_page.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            String[] input_list = {amount.getText().toString(),name.getText().toString(),phone_no.getText().toString(),email.getText().toString()};
            String invalid_msg = check_valid(input_list);
            if (invalid_msg.equals("")) {
                new FormHandler(ctx,formListener).execute(type.getText().toString(),amount.getText().toString(),period.getSelectedItem().toString(),name.getText().toString(),phone_no.getText().toString(),email.getText().toString());
            } else {
                Toast.makeText(ctx, invalid_msg ,Toast.LENGTH_LONG).show();
            }
        }
    });
}

然后,例如,如果我进入第一个页面,它会两次调用InstantiateItem,位置分别是0和1,并且它会调用form1()和form2(),只有在我进入该页面时才期望它调用该页面的功能。例如,在第一页上,运行form1(),在第二页上,运行form2()。如何解决?谢谢。

更新(1):

这导致了一个问题,当我进入第二个选项卡时,它会预加载第三个选项卡,它调用了form3(),因此在第二个选项卡的那些edittext中输入数据并转到第三个选项卡后,它不会调用form3( ),因此第3个标签不会显示第2个标签的输入数据(该视图已预先加载并实例化)

更新(2):

该页面不是片段,而是布局,并在适配器上膨胀(名为“ rootview”,页面数组为:)

int[] pages = {R.layout.form_1,R.layout.form_2,R.layout.form_3,R.layout.form_4};

更新(3):

我的整个浏览器

    private class ViewPageAdapter extends PagerAdapter {
    // Declare Variables
    public int[] pages;
    private LinearLayout rootView;

    public ViewPageAdapter(int[] _pages) {
        pages = _pages;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == (LinearLayout) object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        rootView = (LinearLayout) LayoutInflater.from(ctx).inflate(
                pages[position], null);

        if (position == 0) {
            form1(rootView);
        } else if (position == 1) {
            form2(rootView);
        } else if (position == 2) {
            form3(rootView);
        } else if (position == 3) {
            form4(rootView);
        }

        ((ViewPager) container).addView(rootView);
        return rootView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        ((ViewPager) container).removeView((LinearLayout) object);
    }

    @Override
    public int getCount() {
        return pages.length;
    }
}
马尼万南

您可以在适配器中覆盖setPrimaryItem方法。此方法将给出当前的显示对象。这可能对您有帮助。

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
    if (mobject != object) {
      mObject=objet; //mObject is global variable in adapter
      //You can update your based on your logic like below 
      View view == (LinearLayout) object;
      form4(view);
    }
    super.setPrimaryItem(container, position, object);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ViewPager中加载页面时显示进度图标

来自分类Dev

在Android中加载Google Map问题

来自分类Dev

仅在选择时如何在ViewPager中加载片段

来自分类Dev

在webView android中加载本地html文件

来自分类Dev

JPG不能仅在Android中加载

来自分类Dev

在WebView Android中加载本地HTML文件

来自分类Dev

无法在Android中加载Facebook图片

来自分类Dev

MapView控件未在ViewPager中加载

来自分类Dev

毕加索无法在Android中加载

来自分类Dev

在Java Android中加载外部JSON文件

来自分类Dev

在Android Studio中加载YouTube示例项目

来自分类Dev

在Android中加载非常大的图像

来自分类Dev

尝试在Keras中加载顺序模型时出现“ KeyError:0”

来自分类Dev

图像未在Flutter Android中加载

来自分类Dev

位图在android应用中加载时间过长

来自分类Dev

在列表视图中加载Android图片

来自分类Dev

在Android中加载小部件时出错

来自分类Dev

在Android的WebView中加载URL的问题

来自分类Dev

在Android Java中加载资产的最佳方法

来自分类Dev

在webview中加载网页(android)

来自分类Dev

以编程方式在Android中加载图像

来自分类Dev

在Android App中加载网页

来自分类Dev

在Android的ListView中加载更多选项

来自分类Dev

在ListView Android中加载图像

来自分类Dev

在Android Studio中加载图片

来自分类Dev

Android ViewPager加载了太多页面

来自分类Dev

从MySQL数据库在viewpager中加载图像

来自分类Dev

在Android中加载相机

来自分类Dev

在android imageview中加载图像