0

このように、フラグメントアクティビティクラス内にハッシュマップの配列リストがあります。これは OnCreate メソッド内にあります。

   try {
       pp = new Parser(getQuery());
       productData = pp.getData(asynctask, getQuery());
       Log.v("data size:", ""+productData.size()+"");
    } catch (URISyntaxException e) {
    e.printStackTrace();
        } 
    public ArrayList<HashMap<String, String>> getProductData()
      {
      return this.productData;
      }

ここでは正常に動作し、データが正しくロードされています。また、変数 productData は public として宣言されています。

これが私のフラグメントアダプタークラスです:

   public class ProductViewPagerAdapter extends FragmentPagerAdapter {
      ProductViewActivity productViewActivity = new ProductViewActivity();;
        public ProductViewPagerAdapter(FragmentManager fm) {
    super(fm);
    }

   @Override
    public Fragment getItem(int i) {
        int temp = productViewActivity.getProductData().size();
        Log.v("size:",""+temp+""); 
        Fragment fragment = new ProductViewFragment();
        Bundle args = new Bundle();
        args.putInt(ProductViewFragment.ARG_SECTION_NUMBER, i + 1);
        fragment.setArguments(args);
        return fragment;
       }

ここでサイズは0になります。それはNullポインタ例外になります。ここで問題はどこにありますか?

4

1 に答える 1

1

それはあなたの問題だ:

ProductViewActivity productViewActivity = new ProductViewActivity(); instanceのコンストラクターでアクティビティのを渡す必要がありますProductViewPagerAdapter

public ProductViewPagerAdapter(FragmentManager fm, ProductViewPagerAdapter activity) {
    super(fm);
    mActivity = activity;
    }

またはセッター関数で明示的に設定します。

public void setActivity( ProductViewPagerAdapter activity) {
        mActivity = activity;
        }

次に変更

int temp = productViewActivity.getProductData().size();

に:

int temp = mActivity.getProductData().size();

お役に立てれば

于 2012-10-04T19:31:13.823 に答える