停止在标签中调用函数

6 tabs android json listview

我的android中有3个滑动标签(A,B,C).当来到标签c时,我有一个函数RetrieveData(),用于从中检索MySQL和加载数据listView.

假设在MySQL中我只有一行数据,当来到c时,数据将被加载到listView(仅一个列表).当我滑动到选项卡A并再次滑动到C时,列表现在变为2.有没有办法让我可以进行RetrieveData()一次唯一的通话?谢谢.

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View edit_details = inflater.inflate(R.layout.edit_work_details, container, false);
       // EditDetails = new ArrayList<HashMap<String, String>>();
        listViewUpdate = (ListView) edit_details.findViewById(R.id.listViewEdit);
        totalHours=(TextView)edit_details.findViewById(R.id.hour);
        setHasOptionsMenu(true);
        Bundle bundle = this.getArguments();
        if (getArguments() != null) {
            ID = bundle.getString("ID");
           RetrieveData(ID); // retrieve data from MySQL
        }
        Toast.makeText(getActivity(), "Details" + ID, Toast.LENGTH_LONG).show();
      }
Run Code Online (Sandbox Code Playgroud)

TabAdapter

public class TabsFragmentPagerAdapter extends FragmentPagerAdapter {

    public TabsFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
        // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int index) {
        // TODO Auto-generated method stub

        if(index == 0) {

            Fragment fragment=new A();
            Bundle bundle = new Bundle();
            bundle.putString("ID", Edit.ID);
            fragment.setArguments(bundle);
            return fragment;

        }
        if(index == 1) {
            Fragment fragment = new B();
            Bundle bundle = new Bundle();
            bundle.putString("ID", Edit.ID);
            fragment.setArguments(bundle);
            return fragment;
        }

        if(index == 2) {
            Fragment fragment = new C();
            Bundle bundle = new Bundle();
            bundle.putString("ID", Edit.ID);
            fragment.setArguments(bundle);
            return fragment;
        }

        return null;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3;
    }

}
Run Code Online (Sandbox Code Playgroud)

ViewPager代码

public class ActivityB extends ActionBarActivity implements ActionBar.TabListener {

    private ViewPager viewPager;
    private ActionBar actionBar;
    private TabsFragmentPagerAdapter tabsAdapter;
    private String[] item = new String[]{"Information","Work Force","Work Details"};
    private String id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
//        id=getIntent().getExtras().getString("ID");
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        tabsAdapter = new TabsFragmentPagerAdapter(getSupportFragmentManager());
        viewPager.setAdapter(tabsAdapter);
        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        for(int i=0; i<4; i++){
            actionBar.addTab(actionBar.newTab().setText(item[i]).setTabListener(this));
        }
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg) {
                // TODO Auto-generated method stub
                actionBar.setSelectedNavigationItem(arg);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });

    }



    @Override
    public void onTabReselected(ActionBar.Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction arg1) {
        // TODO Auto-generated method stub
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub

    }

}
Run Code Online (Sandbox Code Playgroud)

这是我的标签c

在此输入图像描述

再次滑动到A和C之后

在此输入图像描述

好像它RetrieveData再次呼唤.

Rav*_*avi 1

你应该setOffscreenPageLimit使用ViewPager. 它将设置您首先要加载的寻呼机页面数。

setOffScreenPageLimit 的默认值为 1,因此它将加载当前页面和下一页。在您的情况下,它将加载,A并且当您从它B移动到时,它将销毁 的实例。CBA

尝试使用

`pager.setOffscreenPageLimit(2)`
Run Code Online (Sandbox Code Playgroud)

它将加载当前页面和另外 2 个页面,因此 A、B 和 C 将被加载一次。

编辑

设置在空闲状态下应保留在视图层次结构中当前页面任一侧的页面数。超出此限制的页面将在需要时从适配器重新创建。

这是作为优化提供的。如果您提前知道需要支持的页面数量或在页面上设置延迟加载机制,则调整此设置可以提高分页动画和交互的流畅度。如果您有少量页面(3-4)可以同时保持活动状态,那么当用户来回翻页时,在新创建的视图子树的布局上花费的时间就会更少。

来源

这显然意味着您可以设置要在初始级别加载的页面数,如果您想在第一次运行时加载 5 个页面,请将其值设置为 4。

现在,如果您从 5 个页面中的任何一个页面移动,onCreateView()ofFragment将不会被调用,因为它已经在初始阶段加载了。