gpt4 book ai didi

android - DialogFragment 中的 ViewPager + FragmentPagerAdapter 得到 "IllegalArgumentException:No view found..."

转载 作者:IT老高 更新时间:2023-10-28 21:39:57 26 4
gpt4 key购买 nike

我试图显示一个 FragmentDialog(创建并显示为一个对话框,而不是作为 View 层次结构中的内容添加),其中有一个 ViewPager,其内容由 FragmentPagerAdapter 给出(提供由图像组成的 fragment )。

当从 FragmentActivity 显示 ViewPager + FragmentPagerAdapter 时,该代码运行良好,但从 FragmentDialog 执行此操作时会出现以下异常:

“IllegalArgumentException:没有为 fragment SimpleFragment 找到 id 0x7f040077 的 View ...”

这是我的代码:

带有用于创建和显示对话框的按钮的 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");
}

fragment 对话框:

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() 方法,并且 nullPointer 检查:

@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 个整数的整数数组)的长度为零,则适配器不会尝试创建任何 fragment ,因此对话框正确显示但为空(如预期的那样)。膨胀时在 SimpleFragment.onCreateView() 抛出异常。异常中引用的 id(未找到)对应于 ViewPager 的 id,并在 R.layout.simple_fragment 中正确定义。

我也尝试使用 AlertDialog.builder 以及直接使用 Dialog() 构造函数构建 Dialog,但得到相同的行为。

最佳答案

试试这个:

在类 AchGalleryDialog

MyFragmentAdapter adapter = new MyFragmentAdapter(getChildFragmentManager(),images);

而不是

MyFragmentAdapter adapter = new MyFragmentAdapter(getFragmentManager(),images); 

因为这个:

http://developer.android.com/about/versions/android-4.2.html#NestedFragments

希望这会有所帮助!

关于android - DialogFragment 中的 ViewPager + FragmentPagerAdapter 得到 "IllegalArgumentException:No view found...",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13334733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com