当我使用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);
}
}
答案 0 :(得分:0)
从片段中进行Parse更新。
在同一片段中为VP执行ArrayAdapter。
考虑使用&#39; ViewHolder&#39;适配器模式(google it)
使用模型或模型的概念作为公共对象与...协作:
解析插入
解析回调(如果需要将OID导入模型中)
模型到数组,数组元素到适配器使用的ViewHolder
在来自解析插入的CallBack上,调用一个函数,该函数将模型的必需属性插入到Adapter的数组中。取决于适配器类型,您可能必须使用特殊的&#34; insert()&#34;方法 。
然后,调用&#34; notifyall()&#34;在适配器上。
它应该都能正常工作。