Android Fragment (OnboardingFragment) get event from Activity

1

In my MainActivity How can I get events that happen in one of my fragments ?

public class ManActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_formulario);
//Este boton está dentro de fragment.xml 
Button tvDateB = (Button) findViewById(R.id.tvDate); 
        tvDateB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "Boton de fragment", Toast.LENGTH_SHORT).show();
            }
        });
}
}

I am using OnboardingFragment and different classes of Onboarding

// This is OnboardingFragment // This works fine, and I change Fragment by sliding. // I would like that in addition to calling each layout I also call the class: "public class Fragment_1 extends Fragment {" and to each of the classes of the Fragment

public class OnboardingFragment extends Fragment {

private static final String PAGE = "page";

private int backgroundColor;
private int page;

public static OnboardingFragment newInstance(int page) {
    OnboardingFragment fragment = new OnboardingFragment();

    Bundle b = new Bundle();
    b.putInt(PAGE, page);

    fragment.setArguments(b);

    return fragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    page = getArguments().getInt(PAGE);

}

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

    int layoutResId;
    switch (page) {
        case 0:
            layoutResId = R.layout.fragment_1;
            break;
        case 1:
            layoutResId = R.layout.fragment_2;
            break;
        case 2:
            layoutResId = R.layout.fragment_3;
            break;
        case 3:
            layoutResId = R.layout.fragment_4;
            break;
        case 4:
            layoutResId = R.layout.fragment_1;
            break;
        default:
            layoutResId = R.layout.fragment_1;
            break;
    }

    View view = getActivity().getLayoutInflater().inflate(layoutResId, container, false);
    view.setTag(page);

    return view;
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
}

}

    
asked by Lorenzo Suarez 26.10.2018 в 18:33
source

1 answer

0

First of all I suggest using OnboardingSupportFragment instead of OnboardingFragment , because that is marked as obsolete from API 27.

To do what you want you must create a interface ,

public interface MyInterface {
    public void myEvent();
}

your Activity that will contain the Fragment must implement the interface:

public class MainActivity extends Activity implements MyInterface {

   @override
   public void myEvent() {
      //....
   }
}

and within your Fragment you can call the method that indicates an event and will be "read" by the Activity

public class MyFragment extends Fragment {
   MyInterface interface;

   public void setInterface(MyInterface interface) {
      this.interface = interface;
   }

   public void myEvent(View v) {
     //Realiza un evento
     ...
     ...
   }
}
    
answered by 26.10.2018 в 18:50