Я следую учебному пособию, в котором содержится
- основное действие с макетом фрагмента и 3 фрагментами,
- действие с навигационным блоком и
- действие с вкладкой.
В этом видео, когда гид добавит действие «Ящик навигации», Studio автоматически создаст PlaceHolderFragment.java
, чего не было при добавлении.Поэтому я помещаю все onClickListener
в Navigation_Activity.java
, и это работает.
И затем я добавляю Tab Activity, которая автоматически создает PlaceHolderFragment.java
в package -> ui.main.Ничего страшного.Я не следил за видео, но добавил всю логику в Tab_Activity.java
, но когда я пытался запустить его, выбрасываю кнопку из первого фрагмента, расположенного в основном упражнении, выдает следующее сообщение об ошибке:
java.lang.NullPointerException: попытка вызвать виртуальный метод 'void android.widget.TextView.setText (java.lang.CharSequence)' для ссылки на пустой объект в com.example.learnfragment.ui.main.PlaceholderFragment $ 1.onChanged(PlaceholderFragment.java:53) на com.example.learnfragment.ui.main.PlaceholderFragment $ 1.onChanged (PlaceholderFragment.java:50)
Это смутило меня, потому что я не имею ничего общего с Placeholder иво вкладке Activity.xml нет textview
.
Начиная с этой ошибки, я пытался перетащить TextView и кнопку в пейджер, который находится на вкладке Activity, но он не отображается на экране.Похоже, я не могу ничего положить в viewpager.Я должен уменьшить размер окна просмотра и вывести его из окна просмотра, но все еще на вкладке.
Я пытался удалить метод, который выдает мне ошибку:
// Line 50
pageViewModel.getText().observe(this, new Observer<String>() {
@Override
// Blow is line 53
public void onChanged(@Nullable String s) {
textView.setText(s);
}
});
Это работает.Но на странице просмотра отображается только первый Fragement, даже если я пытаюсь переключаться между различными вкладками, и на нем не отображаются кнопка и текстовое представление, которые я создаю в сегменте ViewPage.
FirstFragment.java
inflate.findViewById(R.id.btn_ShowTabActivity).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), TabActivity.class));
}
});
TabActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab);
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(sectionsPagerAdapter);
TabLayout tabs = findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager);
Activity_tab.xml
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="551dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<--I Created the Button and textview but it does not show in the viewpage-->
<Button
android:text="test"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</android.support.v4.view.ViewPager>
Мой вопрос:
Что такое заполнитель?Почему навигационный ящик не нуждается в этом, но видео показывает, что Studio создаст это?
Зачем во вкладке Activity нужен местозаполнитель?
Почему я не могу перетащить или создать текстовое представление и кнопку на панели просмотра, но видео показывает, что это действительно так?.