質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

1回答

803閲覧

AndroidでDialogでViewPagerを表示したいがIllegalArgumentException: No view found

yrema

総合スコア286

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2018/06/22 02:59

編集2022/01/12 10:55

タイトル通り、以下のようにclickするとDialogが開き、その中でViewPagerが表示されるようにしたいです。

java

1TestActivity.java 2public class TestActivity extends AppCompatActivity { 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_test); 8 9 findViewById(R.id.click_layout).setOnClickListener(new View.OnClickListener() { 10 @Override 11 public void onClick(View v) { 12 // ダイアログ表示 13 Dialog ImageDialog = new Dialog(TestActivity.this); 14 ImageDialog.setContentView(R.layout.image_dialog); 15 ImageDialog.getWindow().setBackgroundDrawable(new ColorDrawable((Color.TRANSPARENT))); 16 FragmentManager manager = getSupportFragmentManager(); 17 TestImageDialogViewPagerAdapter adapter = new TestImageDialogViewPagerAdapter(manager); 18 adapter.setContext(TestActivity.this); 19 ViewPager viewPager = (ViewPager) ImageDialog.findViewById(R.id.image_dialog_viewpager); 20 viewPager.setAdapter(adapter); 21 ImageDialog.show(); 22 } 23 }); 24 25 } 26 27}

java

1▼activity_test.xml 2<?xml version="1.0" encoding="utf-8"?> 3<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 android:id="@+id/root" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical"> 9 10 <LinearLayout 11 android:id="@+id/click_layout" 12 android:layout_width="match_parent" 13 android:layout_height="match_parent" 14 android:background="#FF9999" 15 android:orientation="vertical"> 16 17 </LinearLayout> 18</LinearLayout> 19

java

1TestImageDialogViewPagerAdapter.java 2public class TestImageDialogViewPagerAdapter extends BaseFragmentPagerAdapter { 3 4 public TestImageDialogViewPagerAdapter(FragmentManager fm) { 5 super(fm); 6 } 7 8 @Override 9 public Fragment getItem(int position) { 10 ImageDialogChildFragment imageDialogChildFragment = ImageDialogChildFragment.newInstance(position); 11 imageDialogChildFragment.setPosition(position); 12 imageDialogChildFragment.setContext(mContext); 13 imageDialogChildFragment.setParentFragment(mParentFragment); 14 15 return imageDialogChildFragment; 16 17 } 18 19 @Override 20 public int getCount() { 21 return 2; 22 } 23 24 @Override 25 public CharSequence getPageTitle(int position) { 26 String title = ""; 27 return title; 28 } 29 30 31}

clickした後に出るエラーは以下の通りです。

text

106-22 11:50:50.852 27169-27169/xx.xx.xxxxxx.xxxx E/AndroidRuntime: FATAL EXCEPTION: main 2 Process: xx.xx.xxxxxx.xxxx, PID: 27169 3 java.lang.IllegalArgumentException: No view found for id 0x7f0f021a (xx.xx.xxxxxx.xxxx:id/image_dialog_viewpager) for fragment ImageDialogChildFragment{1e95822 #0 id=0x7f0f021a android:switcher:2131690010:0} 4 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1293) 5 at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 6 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 7 at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 8 at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 9 at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 10 at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 11 at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1984) 12 at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626) 13 at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 14 at android.support.v4.view.ViewPager.populate(ViewPager.java:1268) 15 at android.support.v4.view.ViewPager.populate(ViewPager.java:1116) 16 at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642) 17 at android.view.View.measure(View.java:19887) 18 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 19 at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 20 at android.widget.LinearLayout.measureVertical(LinearLayout.java:758) 21 at android.widget.LinearLayout.onMeasure(LinearLayout.java:640) 22 at android.view.View.measure(View.java:19887) 23 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 24 at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 25 at android.view.View.measure(View.java:19887) 26 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 27 at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 28 at android.view.View.measure(View.java:19887) 29 at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6083) 30 at android.widget.FrameLayout.onMeasure(FrameLayout.java:185) 31 at com.android.internal.policy.DecorView.onMeasure(DecorView.java:689) 32 at android.view.View.measure(View.java:19887) 33 at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2314) 34 at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1374) 35 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1654) 36 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1289) 37 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6382) 38 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) 39 at android.view.Choreographer.doCallbacks(Choreographer.java:686) 40 at android.view.Choreographer.doFrame(Choreographer.java:621) 41 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) 42 at android.os.Handler.handleCallback(Handler.java:751) 43 at android.os.Handler.dispatchMessage(Handler.java:95) 44 at android.os.Looper.loop(Looper.java:154) 45 at android.app.ActivityThread.main(ActivityThread.java:6119) 46 at java.lang.reflect.Method.invoke(Native Method) 47 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:906) 48 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)

◆環境
min sdk 21
target sdk 25
compile sdk 25
android stuiod 2.3.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

DialogはActivityから独立したWindow上に表示されるので、Activityから取得したFragmentManagerを使ってDialog内でFragmentの操作を行うことはできません。よって、ViewPagerに設定しているFragmentPagerAdapterも動作しないことになります。

解決するには、 DialogFragment を使ってみてください。 getChildFragmentManager() で自身の下に配置するFragmentを操作するFragmentManagerを取得できるので、それをadapterに渡してあげればよいです。

java

1class ImageDialogFragment extends AppCompatDialogFragment { 2 3 @Override 4 public Dialog onCreateDialog(Bundle savedInstanceState) { 5 Dialog ImageDialog = new Dialog(getContext()); 6 ImageDialog.setContentView(R.layout.image_dialog); 7 ImageDialog.getWindow().setBackgroundDrawable(new ColorDrawable((Color.TRANSPARENT))); 8 FragmentManager manager = getChildFragmentManager(); 9 TestImageDialogViewPagerAdapter adapter = new TestImageDialogViewPagerAdapter(manager); 10 adapter.setContext(getContext()); 11 ViewPager viewPager = (ViewPager) ImageDialog.findViewById(R.id.image_dialog_viewpager); 12 viewPager.setAdapter(adapter); 13 return ImageDialog; 14 } 15 16 ... 17 18} 19 20// Activity側 21ImageDialogFragment.newInstance().show(getSupportFragmentManager(), "tag");

投稿2018/06/23 00:12

kakajika

総合スコア3131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問