如何在fragment中獲取自定義view的控制元件id
今天在CSDN上下載了一個關於廣告輪播的demo,上面的控制元件是自定義view的控制元件。當我把它放到專案中犯了難,因為他直接在activity中定義,
而我需要將其放入fragment中,所以報了一堆錯誤還有空指標,主要的問題及解決可見程式碼,需要注意的問題是,不能直接在oncreate方法中直接初始化控制元件,而是需要重寫onStart()方法:
public void onStart() {
super.onStart();
initData();
//makeInitData();
//realizeFunc1();
realizeFunc2();
}
private void initData() {
AdvertisementInfo ad1 = new AdvertisementInfo(getActivity() ,R.drawable.banner2, "第1張廣告");
AdvertisementInfo ad2 = new AdvertisementInfo(getActivity() ,R.drawable.banner3, "第2張廣告");
dataInfos = new AdvertisementInfo[]{ad1,ad2};
}
public void realizeFunc1(){
adGallery = (AdGallery)getView().findViewById(R.id.adGallery);
adGallery.setAdOnItemClickListener((OnAdItemClickListener) mContext);
adGallery.init(dataInfos, 2000, new OnGallerySwitchListener() {
@Override
public void onGallerySwitch(int position) {
System.out.println("onGallerySwitch position=>"+position);
}
},true);
}
public void realizeFunc2(){
adContainer = (RelativeLayout)getView().findViewById(R.id.ad_container);
adGalleryHelper = new AdGalleryHelper(getActivity(), dataInfos, 2000,true);
adContainer.addView(adGalleryHelper.getLayout());
adGallery = adGalleryHelper.getAdGallery();
adGallery.setAdOnItemClickListener(this);
}
其中比較主要的程式碼就是
adGallery = (AdGallery)getView().findViewById(R.id.adGallery);
這個是EC提示出來的,不是很理解為神馬要這麼轉換(OnAdItemClickListener) mContext
adGallery.setAdOnItemClickListener((OnAdItemClickListener) mContext);
還有就是所有的上下文要用getActivity()來表示,否則報一堆空指標。完畢