как вызвать метод Activity(класс Java ) из фрагмента?

#java #android-fragments #android-activity

Вопрос:

как я могу вызвать или вызвать обычный метод класса активности из фрагмента. Я попытался вызвать метод activityFunction класса регистрации из фрагмента, как показано ниже, и он возвращает исключение нулевого указателя. ниже приведен весь класс фрагментов, и любая помощь будет весьма признательна. я погуглил , и было упомянуто, что я должен вручную назначить фрагмент действию, а затем вызвать метод, но я вроде как не мог найти способ сделать это . Любая помощь будет высоко оценена. Ниже в коде я пытался вызвать метод действия из фрагмента при нажатии кнопки.

Носитель регистрации = новая регистрация(); функция media.activityFunction();

  public class fragment_login extends Fragment  {
         private static final String ARG_PARAM1 = "param1";
            private static final String ARG_PARAM2 = "param2";
        
            // TODO: Rename and change types of parameters
            private String mParam1;
            private String mParam2;
            public fragment_login() {
                // Required empty public constructor
            }
            public static fragment_login newInstance(String param1, String param2) {
                fragment_login fragment = new fragment_login();
                Bundle args = new Bundle();
                args.putString(ARG_PARAM1, param1);
                args.putString(ARG_PARAM2, param2);
                fragment.setArguments(args);
                return fragment;
            }


           @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                // Inflate the layout for this fragment
               View v = inflater.inflate(R.layout.fragment_login, container, false);
               login = v.findViewById(R.id.et_email);
               password = v.findViewById(R.id.et_password);
                send = v.findViewById(R.id.btn_login);
                 return v;
            }



         // thats where i am trying to call clas method from fragment 
            @Override
            public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        
                send.setOnClickListener(new View.OnClickListener() {
              
                    Registration media = new Registration();
                    media.activityFunction();
        
                    }
                });
            }
 

Ответ №1:

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

Fragment.java

     LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
    Intent localIntent = new Intent(“CUSTOM_ACTION”);
    intent.putExtra("key", "value");
    localBroadcastManager.sendBroadcast(localIntent);
 

Activity.java

     private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
    public void onReceive( Context context, Intent intent ) {
        String data = intent.getStringExtra(“key”);
        Log.d( “Received data : “, data);
    }
};
 

зарегистрируйте широковещательный приемник в активности в onResume() и отмените регистрацию в onStop().

зарегистрируйтесь, используя код ниже

 IntentFilter filter = new IntentFilter("CUSTOM_ACTION");
    registerReceiver(receiver, filter);
 

отмените регистрацию, используя код ниже:

 localBroadcastManager.unregisterReceiver(receiver);
 

Примечание: Не забудьте использовать то же действие, которое было объявлено при отправке широковещательной передачи.

Комментарии:

1. как я могу вызвать функцию класса активности из фрагмента ?

2. После создания широковещательного события, как описано выше, вы можете вызвать функцию класса активности в методе onReceive ().

Ответ №2:

Вы можете вызвать метод действия таким образом, если в этом действии загружен фрагмент

 ((MainActivity)getActivity()).abcMethod();