#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();