没有查看发现ID为...片段在对话框

问题描述:

我想显示自定义Dialog 2个标签在Activity,但我收到以下错误。没有查看发现ID为...片段在对话框

错误:

No view found for id 0x7f0f0134 (com.hiro.chatio:id/viewPage_theme) for fragment 
    PostColorPickerFragment{35ffefce #0 id=0x7f0f0134 android:switcher:2131689780:0} 
java.lang.IllegalArgumentException: No view found for id 0x7f0f0134 (com.hiro.chatio:id/viewPage_theme) 
    for fragment PostColorPickerFragment{35ffefce #0 id=0x7f0f0134 android:switcher:2131689780:0} 

MainActivity

private Button pick_color; 

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_create_blog); 

    pick_color = (Button) findViewById(R.id.create_blog_color_btn); 

    pick_color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      final Dialog dialog = new Dialog(CreateBlogActivity.this); 
      dialog.setContentView(R.layout.blog_theme_picker); 
      dialog.setCanceledOnTouchOutside(false); 

      dialog.getWindow().getAttributes().windowAnimations = R.style.SlideUpDialogAnimation; 

      Button pickColor = (Button) dialog.findViewById(R.id.pick_color_btn); 
      Button default_color = (Button) dialog.findViewById(R.id.default_color); 

      TabLayout mTabLayout = (TabLayout) dialog.findViewById(R.id.main_tabs_theme); 

      CustomViewPager mViewPager = (CustomViewPager) dialog.findViewById(R.id.viewPage_theme); 

      ThemePagerAdapter mThemePagerAdapter = new ThemePagerAdapter(getSupportFragmentManager()); 

      mViewPager.setAdapter(mThemePagerAdapter); 
      mViewPager.setCurrentItem(0); 

      mViewPager.setPagingEnabled(false); 

      mTabLayout.setupWithViewPager(mViewPager); }); } 

ThemePagerAdapter

public class ThemePagerAdapter extends FragmentPagerAdapter { 

public ThemePagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int position) { 

    switch (position) { 
     case 0: 
      PostColorPickerFragment postColorPickerFragment = new PostColorPickerFragment(); 
      return postColorPickerFragment; 

     case 1: 
      PostThemePickerFragment postThemePickerFragment = new PostThemePickerFragment(); 
      return postThemePickerFragment; 

     default: 
      return null; 
    } 

} 

@Override 
public int getCount() { 
    return 2; 
} 

public CharSequence getPageTitle(int position) { 
    switch (position) { 

     case 0: 
      return "Color"; 
     case 1: 
      return "Theme"; 
     default: 
      return null; 
    } 
} 

PostThemePickerFragment

public class PostThemePickerFragment extends Fragment { 

public PostThemePickerFragment() { 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.post_theme_picker, container, false); 

    return view; 
} 
+1

哪里是'PostColorPickerFragment'代码? –

+0

而不是仅仅一个'Dialog',你将不得不使用一个'DialogFragment' - 及其子'FragmentManager' - 吃出'ViewPager'工作。该'Activity'的'FragmentManager'将不能够找到一个'Dialog'任何东西,因为它没有连接到'Activity'的层次。 –

+0

Mike M.是对的。你必须使用'DialogFragment'而不是'Dialog'。 – Wizard

由于ActivityFragmentManagerDialog中找不到View,因为它的布局未附加到Activity的层次结构中,所以您正在获取该例外。为了在Dialog使用Fragment S,你必须使用一个DialogFragment,通过其子FragmentManagerPagerAdapter来处理事务。

与任何常规的Fragment一样,我们可以在onCreateView()中扩充布局,并将其设置为onViewCreated()。我们也会覆盖onCreateDialog()方法来修改那里的窗口设置。

public class ThemeDialogFragment extends DialogFragment { 
    public ThemeDialogFragment() {} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.blog_theme_picker, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     Button pickColor = (Button) view.findViewById(R.id.pick_color_btn); 
     Button default_color = (Button) view.findViewById(R.id.default_color); 
     TabLayout mTabLayout = (TabLayout) view.findViewById(R.id.main_tabs_theme); 
     CustomViewPager mViewPager = (CustomViewPager) view.findViewById(R.id.viewPage_theme); 

     ThemePagerAdapter mThemePagerAdapter = new ThemePagerAdapter(getChildFragmentManager()); 

     mViewPager.setAdapter(mThemePagerAdapter); 
     mViewPager.setCurrentItem(0); 
     mViewPager.setPagingEnabled(false); 

     mTabLayout.setupWithViewPager(mViewPager); 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     Dialog d = super.onCreateDialog(savedInstanceState); 
     d.getWindow().getAttributes().windowAnimations = R.style.SlideUpDialogAnimation; 
     d.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     d.setCanceledOnTouchOutside(false); 
     return d; 
    } 
} 

你可以看到一切你在onClick()方法有现在在DialogFragment处理,并且该方法变得简单:

pick_color.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      new ThemeDialogFragment().show(getSupportFragmentManager(), "theme"); 
     } 
    } 
); 
+1

tks u,工作正常! –