在Oncreate之后解析回调以及如何将数据传递给碎片

时间:2016-01-18 07:26:58

标签: java android parse-platform callback fragment

当我使用Parse Query从Parse DB中检索数据时,我发现在Oncreate()全部执行后存在数据但是我需要将检索到的数据传递给FragmentAdapter以便将数据传递给三个片段,并设置相应的textView。

这些是Oncreate()

中代码的一部分
try {
            loadData();
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        initSpinner();
        viewPager = (ViewPager)findViewById(R.id.detail_tab_viewpager);
        if (viewPager != null){
            setupViewPager(viewPager);
        }


        TabLayout tabLayout = (TabLayout)findViewById(R.id.detail_tab_layout);
        tabLayout.setupWithViewPager(viewPager);

        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

这些是loadData()的代码, JD和Req以这种方式在名为" InternDetailActivity"的AppCompatActivity类中声明: final List JD = new ArrayList();
final List req = new ArrayList();

问题是我需要设置FragmentPagerAdapter并在Parse回调之后将List JD和req数据传递给三个片段,而不是在Parse回调之前。我设置Toast.makeText来查看运行的代码序列,它按顺序是错误的。 JD和req大小的列表在Oncreate()期间保持为零,即使我调用了loadData()。请解释为什么我不是专业程序员,但我愿意学习基本概念。任何建议......,谢谢!!〜

public void loadData() throws InterruptedException {
    // TODO Auto-generated method stub
    final ProgressDialog pd = new ProgressDialog(this);
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    pd.setMessage("Loading Data");
    pd.setIndeterminate(false);
    pd.setCancelable(false);
    pd.show();

    Thread LoadData = new Thread(){

    public void run(){
        try{
            ParseQuery<Jobs> query = ParseQuery.getQuery(type);

            query.getInBackground(InternDetailActivity.this.job_id, new GetCallback<Jobs>(){

                            @Override
                            public void done(Jobs Jobs, ParseException e) {
                                // TODO Auto-generated method stub

                            Log.v("TESTING INSIDE 1", Integer.toString(JD.size())); 
                            if(e==null){                    
                            JD.add(Jobs.getDescription());
                            req.add(Jobs.getReq());
                            MainApplication.tempjd = Jobs.getDescription();

                            if(e==null && Jobs.getList("Comment")!=null){

                                Log.v("Check Array",Jobs.getList("Comment").get(0).toString());
                                if(Jobs.getList("Comment").size()>0){
                                  for(int i=0;i<=Jobs.getList("Comment").size()-1;i++){ 
                                  gossip.add(Jobs.getList("Comment").get(i).toString());
                                  }
                                }
                            }

                            else{


                            }

                            }

                            else{


                            }


                            pd.dismiss();

                            }
            });


        }
        finally{
            interrupt();
        }       
    }};

    LoadData.start();


}

setupViewPager代码:

private void setupViewPager(ViewPager viewPager){
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFrag(new GossipFragment(), "Gossip");
    adapter.addFrag(new JDFragment(), "JD & Req");
    adapter.addFrag(new PrepareFragment(), "Preparation");
    viewPager.setAdapter(adapter);
    viewPager.setOffscreenPageLimit(5);
}

ViewPagerAdapter代码,我想人们应该对此非常熟悉,哈哈

static class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<Fragment>();
    private final List<String> mFragmentTitleList = new ArrayList<String>();

    public ViewPagerAdapter(FragmentManager manager){
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFrag(Fragment fragment, String title){
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position){
        return mFragmentTitleList.get(position);
    }
}

1 个答案:

答案 0 :(得分:0)

从片段中进行Parse更新。

在同一片段中为VP执行ArrayAdapter。

考虑使用&#39; ViewHolder&#39;适配器模式(google it)

使用模型或模型的概念作为公共对象与...协作:

解析插入

解析回调(如果需要将OID导入模型中)

模型到数组,数组元素到适配器使用的ViewHolder

在来自解析插入的CallBack上,调用一个函数,该函数将模型的必需属性插入到Adapter的数组中。取决于适配器类型,您可能必须使用特殊的&#34; insert()&#34;方法 。

然后,调用&#34; notifyall()&#34;在适配器上。

它应该都能正常工作。