Чего я хочу достичь
- От
FragmentActivity
показывает диалоговое окно при нажатии кнопки действия на панели действий. -
DialogFragment
- Диалог без заголовка -
TabHost
- вкладки в верхней части диалога -
ViewPager
withFragmentPagerAdapter
- Swipable, содержимое которого связано с вкладками - 2-3 кнопки диалога (разные подклассы диалога, разные кнопки) - не должны находиться в одном из
Fragment
ViewPager
, то есть те же кнопки должны оставаться в нижней части диалога независимо от того, какойFragment
показываетViewPager
.
Эта проблема
IllegalStateException: Fragment does not have a view
Что я пробовал/сделал до сих пор
- Использование пакета
android.support.v4
для необходимых классов - Вызов
getChildFragmentManager()
вместоgetSupportedFragmentManager()
- Реализовано то, что пост № 10 предложил по этой ссылке https://code.google.com/p/android/issues/detail?id=42601. Я
ViewPager
код непосредственно в два моих классаFragment
, которые, как предполагается, должен отображатьDialogFragment
, плюс классDialogFragment
. - В своем пользовательском
DialogFragment
я сначала попытался переопределитьonCreateView
, затемonCreateDialog
а затем оба одновременно. Все, что я должен бежать, но с неожиданными результатами.- Только
onCreateView
: неAlertDialog.Builder
связаться сAlertDialog.Builder
для создания необходимых кнопок, кроме того, что результаты диалога были отличными. - Только
onCreateDialog
: сообщение об ошибке показано выше. Я все еще думаю, что этот метод настолько близок, насколько я достиг того, чего я хочу достичь. - И
onCreateView
иonCreateDialog
:onCreateDialog
раскладку диалога вonCreateView
и добавили кнопки диалога вAlertDialog.Builder
вonCreateDialog
.AlertDialog.Builder
диалоговое окно, но добавленные кнопки изAlertDialog.Builder
были не видны. Кроме того, клавиатура не отображается при нажатии на полеEditText
.
- Только
Исходный код
Большинство из них приходят из учебника, чтобы реализовать использование TabHost в Android 2.2 + ViewPager и фрагменты. Код ActivityFragment
вместо этого находится в DialogFragment
. Однако я заменил его ViewPager на измененный из исходного кода из этого ответа qaru.site/info/36692/.... Это должно было быть в состоянии wrap_content
по высоте.
Неисправный код в моем проекте, я полагаю, находится в DialogFragment
onCreateDialog
.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), AlertDialog.THEME_HOLO_DARK);
LayoutInflater inflater = getActivity().getLayoutInflater();
view = inflater.inflate(R.layout.dialog_test, null);
addActionButtons(builder, view);
builder.setView(view);
mViewPager = (WrapContentHeightViewPager) view.findViewById(R.id.viewpager);
initialiseTabHost();
List<Fragment> fragments = getFragments();
pageAdapter = new DialogPageAdapter(getChildFragmentManager(), fragments);
mViewPager.setAdapter(pageAdapter);
mViewPager.setOnPageChangeListener(this);
Dialog dialog = builder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
dialog.show();
return dialog;
}
Стек трассировки журнала LogCat
FATAL EXCEPTION: main
java.lang.IllegalStateException: Fragment does not have a view
at android.support.v4.app.Fragment$1.findViewById(Fragment.java:1425)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:901)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1011)
at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1374)
at my.app.package.name.WrapContentHeightViewPager.onMeasure(WrapContentHeightViewPager.java:31)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15481)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:681)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:15481)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5059)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2377)
at android.view.View.measure(View.java:15481)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1982)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1200)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1398)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1118)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4525)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
at android.view.Choreographer.doCallbacks(Choreographer.java:555)
at android.view.Choreographer.doFrame(Choreographer.java:525)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4946)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.jav
Также...
- Я безуспешно смог попробовать другое возможное решение, упомянутое в https://code.google.com/p/android/issues/detail?id=42601, упомянутое в постах № 2 и № 13, потому что я не понял как и где я могу использовать это в своем коде (я думаю, что я в той же лодке, что и человек, который написал № 18).