据说这是自定义Fragment的Bug。自定义Fragment中的构造方法不能传参数,下面是出错的代码:
public ListFragment(String url, int saleway, int page) { super(); this.mUrl = url; this.mCurrentPage = page; this.mSaleway = saleway; this.mPage = page; this.mParams = getParams(saleway, page); }
通过stackoverflow查到方法,修改后代码如下:
public ListFragment() { super(); } public static final ListFragment get(String url, int saleway, int page) { ListFragment fragment = new ListFragment(); Bundle bundle = new Bundle(); bundle.putString(BUNDLE_URL, url); bundle.putInt(BUNDLE_SALEWAY, saleway); bundle.putInt(BUNDLE_PAGE, page); fragment.setArguments(bundle); return fragment; }实例化有参数的对象只能通过静态方法get中的Bundle来传递参数。
下面是获取Bundle中的数据
<pre name="code" class="java">public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Bundle bundle; if((bundle = getArguments()) != null) { mUrl = bundle.getString(BUNDLE_URL); mSaleway = bundle.getInt(BUNDLE_SALEWAY); mCurrentPage = mPage = bundle.getInt(BUNDLE_PAGE); mParams = getParams(mSaleway, mPage); }}
<p>版权声明:本文为博主原创文章,未经博主允许不得转载。</p>