3 つの異なるページを持つ ViewPager を取得しようとしています。3 つのページすべてに、画像とテキストを含む GridView があります。Json形式でサーバーからデータを取得しています。
問題は...サーバーからデータを取得している場合、GridView の ViewPager ページが空白です。現在 Fragment を使用していますが、機能しません。
TestFragment は、サーバー データのない単純なレイアウトです (ViewPager が機能するかどうかをテストするだけです)...このページは機能します。PersonenFragment はサーバー データを表示する必要がありますが、表示されません。GridView でデータを表示すると、ViewPager がなくても問題なく動作するため、「PersonsListAdapter」のコードに問題はありません。
問題は、GridView が asyncTask からのデータで満たされる前に ViewPager によってページが表示されることだと思います..時間がかかるためです。私は何をしなければなりませんか?
public class PersonenFragmentActivity extends FragmentActivity{
private MyAdapter mAdapter;
private ViewPager mPager;
public Activity act = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.personen_view_pager);
act= this;
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 2;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new TestFragment();
case 1:
return new PersonenFragment("ProfessorInnen", act);
default:
return null;
}
}
}
}
パーソンフラグメント
public class PersonenFragment extends Fragment {
private int mCurrentPage;
private String personenKategorie;
private Activity activity;
private View view;
private GridView gv ;
public PersonenFragment(String personenKategorie, Activity activity) {
this.personenKategorie = personenKategorie;
this.activity = activity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//readWebPage contains the asyncTask which downloads dataFromServer and returns an ArrayList with PersonObjects with the data in it
DownloadPersonen download = new DownloadPersonen();
download.readWebpage(this.personenKategorie);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//layout.Personen is the Layout with the Grid
gv = (GridView) inflater.inflate(R.layout.personen, container, false);
return gv;
}
AsyncTask DownloadPersonen からの postExecute 時
@Override
protected void onPostExecute(ArrayList<Person> personen) {
GridView grid= (GridView) ll.findViewById(R.id.personen_grid_view);
PersonsListAdapter p = new PersonsListAdapter(activity,personen);
grid.setAdapter(p);
}