Открыть действие с помощью кнопки внутри фрагмента (решено!) - PullRequest
0 голосов
/ 26 апреля 2020

Эй, я действительно новичок в кодировании, я пытаюсь открыть действие с помощью кнопки внутри фрагмента (этот фрагмент взят из действия навигационного ящика), но буквально не могу. Всякий раз, когда я пытаюсь открыть свое приложение, оно вылетает, поэтому я провел некоторое исследование и нашел способ сделать это. Проблема в том, где найти решение в моем коде. Я пытался поместить его внутрь фрагмента (везде, но не работает), поэтому он открывает действие, когда нажимается его кнопка. Вот мое кодирование, но эта попытка завершается каждый раз, когда я нажимаю на свой фрагмент внутри приложения. Кодирование внутри конструктора ServicosFragment - это то, что нужно поставить, потому что везде, где он дает мне разные ошибки в кодировании, это единственное место, где я могу сделать правильное кодирование и просто создать sh приложение. Кто-нибудь может помочь?

public class ServicosFragment extends Fragment {

    public  ServicosFragment (){
        Button buttonCriacaoeGestao = getView().findViewById(R.id.buttonCriacaoeGestao);
        buttonCriacaoeGestao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), CriacaoeGestaoActivity.class);
                startActivity(intent);
            }
        });


    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_servicos, container, false);


        }


}

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Дайте мне знать, если это поможет

public class ServicosFragment extends Fragment {
    Button buttonCriacaoeGestao;
    public  ServicosFragment (){

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        buttonCriacaoeGestao = view.findViewById(R.id.buttonCriacaoeGestao);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

    buttonCriacaoeGestao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), CriacaoeGestaoActivity.class);
                startActivity(intent);
            }
        });

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_servicos, container, false);
    }   
}
0 голосов
/ 26 апреля 2020

Вы пытаетесь получить доступ к представлению, прежде чем надувать представление. Это должно привести к сбою вашего приложения.

Здесь вы пытаетесь зарегистрировать прослушиватель щелчков на кнопке на конструкторе. Но когда конструктор работает, представление еще не раздуто, поэтому вы не можете получить доступ к чему-то, чего не существует. Вместо этого переместите код в метод onViewCreated следующим образом. метод будет прерван до установки кнопки на прослушивателе щелчков.

** РЕДАКТИРОВАТЬ - ** Мне очень жаль, я просто проигнорировал, что мне нужно возвращать представление в методе onCreateView во фрагменте (в отличие от onCreate метод в деятельности). Итак, здесь я должен отредактировать ответ, это должно работать. Вы сохраняете представление в объекте View, и вам, наконец, нужно вернуть его в конце метода.

А также вы можете получить доступ к кнопкам и другим компонентам вашего xml через представление, как показано в коде.

public class ServicosFragment extends Fragment {

public  ServicosFragment (){



}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_servicos, container, false);

    Button buttonCriacaoeGestao = view.findViewById(R.id.buttonCriacaoeGestao);
    buttonCriacaoeGestao.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), CriacaoeGestaoActivity.class);
            startActivity(intent);
        }
    });
    return view;
    }


}
0 голосов
/ 26 апреля 2020

Я считаю, что проблема в конструкторе. Ваш конструктор пытается открыть новое действие, прежде чем ваш фрагмент получит его представление. Пожалуйста, попробуйте это без каких-либо конструкторов.

public class ServicosFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

         Button buttonCriacaoeGestao=getView().findViewById(R.id.buttonCriacaoeGestao);
         buttonCriacaoeGestao.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
             Intent intent = new Intent(getActivity(), CriacaoeGestaoActivity.class);
             startActivity(intent);
         }});

         return inflater.inflate(R.layout.fragment_servicos, container, false);     
    }
}

И когда вы зададите вопрос в следующий раз, попробуйте указать, какие исключения получает ваше приложение при сбое.

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