Намерение к активности не работает при использовании фрагмента для просмотра карты при клике - PullRequest
0 голосов
/ 02 ноября 2019

Я использую fragment для удержания 4 просмотров карт , которые должны начать новое действие при нажатии. Он может отображать сгенерированный мной toast, который показывает, что функция щелчка работает, но не может активировать намерение.

Я попытался использовать несколько имен для действия, а также

Intent intent = new Intent (getActivity(), activity name.class)

код для начала действия

package com.example.eb.ui.home;
import ...
public class HomeFragment extends Fragment implements View.OnClickListener{
    private HomeViewModel homeViewModel;
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
  homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);
        final CardView  java = root.findViewById(R.id.javacardId);
        final CardView  html = root.findViewById(R.id.htmlcardId);
        final CardView  c_prog = root.findViewById(R.id.C_cardId);
        final CardView  cpp = root.findViewById(R.id.cppcardId);
           //set on click listener
        java.setOnClickListener(this);
        html.setOnClickListener(this);
        cpp.setOnClickListener(this);
        c_prog.setOnClickListener(this);
             return root;
    }
    @Override
    public void onClick(View v) {
        Intent i;
        switch(v.getId()){
            case R.id.javacardId :
                i = new Intent(this,html.class);
                startActivity(i);
                   break;
            case R.id.htmlcardId :
                i = new Intent(this,html_prog.class);
                startActivity(i);
                 break;
            case R.id.cppcardId :
                i = new Intent(this,cpp_prog.class);
               startActivity(i);
               break;
            case R.id.C_cardId :
                i = new Intent(this,c_prog.class);
                startActivity(i);
                break;
            default: break;
        }

    }
}
---

Я ожидаю, что просмотр карты в этом fragment откроет новое действие

Ответы [ 4 ]

0 голосов
/ 02 ноября 2019

Первый параметр, необходимый для Intent - это Context

Как указано в документации Android ( Здесь ):

packageContext  Context: A Context of the application package implementing this class.

Следовательно, вам нужнопередать getContext() или getActivity() (поскольку Activity расширяется Context) следующим образом:

i = new Intent(getActivity(), html.class);
startActivity(i);

Я попытался создать и запустить приложение, используя ваш код (после внесения изменений выше), и оноработал нормально.

0 голосов
/ 02 ноября 2019

вы должны использовать собственные имена для ваших действий, таких как HtmlActivity. он всегда должен начинаться с заглавной буквы

i = new Intent(getActivity(), HtmlActivity.class);
startActivity(i);
0 голосов
/ 02 ноября 2019

Вы должны использовать getActivity () вместо 'this' во фрагменте для контекста, как показано ниже.

@Override
public void onClick(View v) {
    Intent i;
    switch(v.getId()){
        case R.id.javacardId :
            i = new Intent(getActivity(),html.class);
            startActivity(i);
               break;
        default: break;
    }
0 голосов
/ 02 ноября 2019

Попробуйте изменить ключевое слово "this" на getContext ()

  "i = new Intent(this,html.class);"

должно быть

  i = new Intent(getContext,html.class);

или инициализировать и установить clicklistener в методе жизненного цикла onViewCreated () Fragment.

...