gpt4 book ai didi

android - android中viewpager的加载顺序

转载 作者:行者123 更新时间:2023-11-29 21:01:27 31 4
gpt4 key购买 nike

假设有一个 4 页的 viewpager,第 1 页和第 2 页存储编辑文本,第 3 页需要显示从第 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;
}

示例函数 form2

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(),所以当我在第二个选项卡的编辑文本中输入数据并转到第三个选项卡时,它不会再次调用 form3(),因此第三个选项卡不显示来自第二个选项卡的输入数据( View 已预加载并实例化)

更新(2):

页面不是 fragment ,它是布局并在适配器处膨胀(名为“rootview”,页面数组是:)

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

更新(3):

我的整个viewpager

    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);
}

关于android - android中viewpager的加载顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986949/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com