2

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

    }
4

0 に答える 0