Android приложение для рисования, предназначенное для одного просмотра, должно работать в многоэкранном приложении Bottom Navigation Activity. - PullRequest
0 голосов
/ 29 мая 2020

Я совершенно новый Android разработчик и сейчас довольно растерян. Я следую этому учебному руководству , поскольку я пытаюсь включить рисование в представлении в моем приложении, которое является проектом "Bottom Navigation Activity" с тремя вкладками или фрагментами. См. Снимок экрана ниже:

enter image description here

Проблема в том, что учебник предназначен для приложения с одним представлением и одной стандартной MainActivity. В этом случае следующий код используется в методе onCreate() в классе MainActivity.java проекта:

public class MainActivity extends AppCompatActivity {
super.onCreate(savedInstanceState):
PaintView paintView = new PaintView(content: this):
setContentView(paintView);
  }

}

Когда я создаю приложение с одним представлением, код работает здорово. Без вопросов. Но в моем проекте "Bottom Navigation Activity" что-то не работает, потому что фрагменты используют тип ViewModel, который не предлагает столь необходимых методов класса View. В моем приложении есть 3 фрагмента, первый из которых называется HomeFragment. Именно на этом фрагменте я хочу, чтобы весь мой рисунок проходил. Метод onCreateView() по умолчанию для этого фрагмента выглядит так:

public class HomeFragment extends Fragment {

private HomeView Model homeViewModel;

public View onCreateView(@NonNull LayoutInflator inflater, ViewGroup container, Bundle savedInstanceState) {

homeViewModel = ViewModelProviders.of(fragment: this).get(HomeViewModel.class);
View root = inflater.inflate(R.layout.fragment_home, container, attachToRoot: false);

return root;
 }
}

См. Снимок экрана ниже, чтобы увидеть, что я пытался сделать. Вы увидите, что я добавил в свой проект класс View с именем PaintView (точно такой же, как в учебнике), который содержит весь код рисования.

enter image description here

К сожалению, он генерирует следующую ошибку компиляции:

Inferred type com.example.mobile_testapp_android_2_ui.home.PaintView for type parameter T is not within its bound; should extend androidx.lifecycle.ViewModel

Любые советы о том, как я могу реализовать класс PaintView из учебника, чтобы я буду очень признателен за то, что я могу использовать его методы для рисования на "HomeFragment".

Спасибо и очень сердечно,

Wulf

1 Ответ

1 голос
/ 29 мая 2020

Вы пытаетесь создать объект HomeViewModel с классом PaintView, что невозможно. Если вы хотите установить PaintView как представление вашего HomeFragment, вам необходимо вернуть его объект как:

    //you can return any kind of view object as you like
    public View onCreateView(@NonNull LayoutInflator inflater, ViewGroup container, Bundle savedInstanceState) {

        PaintView homeFragmentView = new PaintView(requireContext());

        // PaintView class must extends View class
        return homeFragmentView;

    }

Надеюсь, это поможет.


Подробнее о фрагменте здесь

Подробнее о ViewModel здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...