我想顯示一個FragmentDialog(創建並顯示爲一個對話框不添加爲視圖層次結構中的內容),其中有一個ViewPager的內容由FragmentPagerAdapter給出(提供由圖像組成的碎片)。ViewPager + FragmentPagerAdapter在DialogFragment中獲取「IllegalArgumentException:沒有發現視圖...」
:從FragmentActivity顯示當ViewPager + FragmentPagerAdapter,但出現以下情況例外從FragmentDialog這樣做時
代碼工作完美「拋出:IllegalArgumentException:未找到ID爲0x7f040077片段SimpleFragment觀點......」
這是我的代碼:
SherlockFragmentActivity帶有一個按鈕來創建和顯示對話框。
public class BorrameActivity extends SherlockFragmentActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.one_act);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
showTheDialog();
}});
}
private void showTheDialog(){
AchGalleryDialog newFragment = AchGalleryDialog.newInstance(achs);
newFragment.show(getSupportFragmentManager(), "dialog");
}
的FragmentDialog:
public class AchGalleryDialog extends DialogFragment{
public AchGalleryDialog(){
}
public static AchGalleryDialog newInstance(){
AchGalleryDialog f = new AchGalleryDialog();
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_user_result, container);
getDialog().setTitle("Hola tronco");
//content to show in the fragments
int[] images = new int[]{R.drawable.d1, R.drawable.d2, R.drawable.d3};
ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager(),images);
pager.setAdapter(adapter);
return view;
}
}
這是非常簡單的MyFragmentPagerAdapter, 我把僅有的getItem()方法,而空指針檢查:
@Override
public Fragment getItem(int position) {
return MySimpleFragment.newInstance(images[position]);
}
最後SimpleFragment:
public class SimpleFragment extends Fragment{
int id;
public static SimpleAchFragment newInstance(int imgId){
SimpleFragment f = new SimpleFragment();
Bundle args = new Bundle();
args.putLong(ID_BUNDLE, imgId);
f.setArguments(args);
return f;
}
public SimpleAchFragment(){
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.id = getArguments() != null ? getArguments().getInt(ID_BUNDLE) : 0;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.simple_fragment, container, false);
FragmentActivity mAct = getActivity();
ImageView img = (ImageView) v.findViewById(R.id.image);
img.setImageDrawable(mAct.getResources().getDrawable(id));
return v;
}
}
更多信息,如果傳遞給適配器(帶有3個整數的int數組)的內容長度爲零,那麼適配器不會嘗試創建任何Fragment,因此對話框顯示正確但爲空(如預期的那樣)。 在充氣時引發SimpleFragment.onCreateView()異常。 異常中引用的id(未找到)對應於ViewPager的ID,在R.layout.simple_fragment中正確定義。
我也嘗試使用AlertDialog.builder構建對話框,並直接使用Dialog()構造函數,但得到相同的行爲。
我有完全相同的問題...你有沒有發現任何解決方法? – brk3