#java #android #android-fragments #layout #youtube
#java #Android #android-фрагменты #макет #YouTube
Вопрос:
Я использую YoutubePlayerSupportFragment в своем приложении. Я создаю фрагмент из кода (не xml) и внедряю его в действие с помощью FragmentManager:
String video_id = "LHcP4MWABGY";
YoutubeFragment youtubeFragment = YoutubeFragment.newInstance(video_id);
mFragmentManager.beginTransaction().replace(R.id.activity_main, youtubeFragment).commit()
Как я могу определить ширину / высоту фрагмента youtube? Я пробовал с:
ViewGroup.LayoutParams params = (ViewGroup.LayoutParams)youtubeFragment.getView().getLayoutParams();
params.height = 400;
youtubeFragment.getView().setLayoutParams(params);
но это дает мне исключение NullPointerException. Исключение находится в этой строке:
ViewGroup.LayoutParams params = (ViewGroup.LayoutParams)youtubeFragment.getView().getLayoutParams();
Это журнал ошибок:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()' on a null object reference
at com.test.revy.radioshake.MainActivity$1.onItemClick(MainActivity.java:249)
at android.widget.AdapterView.performItemClick(AdapterView.java:346)
at android.widget.AbsListView.performItemClick(AbsListView.java:1550)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:3830)
at android.widget.AbsListView$3.run(AbsListView.java:5855)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Комментарии:
1. Опубликуйте свои журналы. Также укажите на строку, в которой возникает исключение.
2. Я добавил журнал
3. Я думаю, что после добавления фрагмента вы не дождались его завершения транзакции, т. Е.
youtubeFragment
onCreateView()
Он еще не был вызван или не был завершен. В любом случае вид не установлен.4. Поэтому дождитесь обратного вызова, подтверждающего, что транзакция действительно завершена, или переместите свой код изменения размера
YoutubeFragment
.5. И если я правильно помню, тогда вам нужно будет установить
LayoutParams
значение parent изgetView()
like sogetView().getParent()
, которое вернет ваш контейнерYoutubeFragment
.
Ответ №1:
Как предположил Аббас, проблема заключается в Transaction().[..].commit() FragmentManager (асинхронный вызов). Решаемая с помощью commitNow() вместо commit():
mFragmentManager.beginTransaction().replace(R.id.activity_main, youtubeFragment).commitNow()
Комментарии:
1. Вместо этого вы должны вызвать resize в
onCreateView()
ofYoutubeFragment
.