У меня есть фрагмент, которому необходимо передать более одного действия обратно в его действие. Например,Несколько интерфейсов в одном фрагменте
- При нажатии кнопки необходимо передать onClick обратно в Activity.
2. При совпадении имени пользователя и пароля логическое значение отправляется в Activity, уведомляя его о начале намерения.
Мой первый вопрос заключается в том, является ли это общим, когда фрагмент должен передать больше одного типа действий обратно в Activity? А во-вторых, как это решить? Является следующим хорошим способом сделать это ...
Я создал собственный класс, который расширяет фрагмент и включает в себя два необходимых интерфейса (один для передачи onClick обратно в Activity и One для передачи логического значения):
public class CustomInterfaceFragment extends Fragment {
public OnClickedListener listener;
public LogInInterface loggedInListener;
static interface OnClickedListener{
public void buttonClicked(View v);
}
static interface LogInInterface{
public void userLoggedIn(boolean loggedIn);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.listener = (OnClickedListener)activity;
this.loggedInListener = (LogInInterface)activity;
}}
Затем я расширил этот пользовательский класс в своем фрагменте и использовал соответствующие методы там, где это необходимо. Это метод OnClick в фрагменте ...
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.register_button:{
listener.buttonClicked(v);//***Pass onClick Back to Activity
break;
}
case R.id.fragment_login_loginButton:{
ParseUser.logInInBackground(userName.getText().toString(), password.getText().toString(), new LogInCallback() {
@Override
public void done(ParseUser user, ParseException e) {
if (user!=null){
boolean verified = user.getBoolean("emailVerified");
if(!verified){
Toast.makeText(getActivity(),"Please Verify",Toast.LENGTH_LONG).show();
progressDialog.dismiss();
ParseUser.logOut();
}else{
progressDialog.dismiss();
loggedInListener.userLoggedIn(true);//***Pass boolean Back to Activity
}
}else {
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_LONG).show();
progressDialog.dismiss();
}
}
});
}
break;
}
}
Наконец я реализовал пользовательский класс фрагмента и его интерфейсы в моей деятельности с целью извлечения данных.
Является ли это разумным способом решения этой проблемы или я что-то упускаю? Приложение работает нормально. Я просто хочу знать, какая будет лучшая практика программирования. Спасибо.
И просто реализовать это в классе фрагментов вместо создания отдельного пользовательского? –