J'ai une case à cocher dans un fragment et je veux qu'il publie des données en cliquant sur un bouton de registre, ce bouton est dans mon activité principale?

Je travaille pour la 1ère fois dans le fragment … dans l'activité principale, j'ai un spinnerListner et que l'élément change en spinner, dans le conteneur de fragments … les fragments changent en conséquence et je viens de créer des cases à cocher dans les fichiers fragment.xml .. . Je veux juste publier et stocker une valeur différente "NameoftheCheckbox" pour chaque case cochée et une autre valuelike "Null" pour chaque case à cocher non contrôlée (même à partir des fragments qui ne s'affiche pas dans le conteneur) sur chaque clic d'enregistrement. Comme la façon dont j'essaie de stocker le nom et la broche dans la fonction RegisterUser dans mon activité principale …

My MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText et_Name, et_Pin; private Button RegisterBTN; private ProgressDialog progressDialog; private CheckBox checka, checkb; private Spinner sDropdown; ArrayAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_Name = (EditText)findViewById(R.id.etName); et_Pin = (EditText)findViewById(R.id.etPin); checka = (CheckBox)findViewById(R.id.checkBox_a); RegisterBTN = (Button)findViewById(R.id.btn_Reg); progressDialog = new ProgressDialog(this); //progressDialog.setMessage(); adapter = ArrayAdapter.createFromResource(this, R.array.spinner_options, android.R.layout.simple_spinner_item); spinnerListner(); RegisterBTN.setOnClickListener(this); } public void spinnerListner(){ sDropdown = (Spinner)findViewById(R.id.spinner2); sDropdown.setAdapter(adapter); sDropdown.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { switch (position){ case 0: getSupportFragmentManager().beginTransaction().replace(R.id.frag, Info_frag.newInstance()).addToBackStack(null).commit(); break; case 1: getSupportFragmentManager().beginTransaction().replace(R.id.frag, Plumber_frag.newInstance()).addToBackStack(null).commit(); break; case 2: getSupportFragmentManager().beginTransaction().replace(R.id.frag, Painter_frag.newInstance()).addToBackStack(null).commit(); break; case 3: getSupportFragmentManager().beginTransaction().replace(R.id.frag, Electrician_frag.newInstance()).addToBackStack(null).commit(); //Toast.makeText(MainActivity.this,"F3", Toast.LENGTH_SHORT).show(); break; } /** * TextView spinnerDailogText = (TextView)view; Toast.makeText(MainActivity.this, "You selected:"+ spinnerDailogText.getText(), Toast.LENGTH_SHORT).show();*/ } @Override public void onNothingSelected(AdapterView<?> parent) { } } ); } private void registerUser(){ final String name = et_Name.getText().toString().trim(); final String pin = et_Pin.getText().toString().trim(); progressDialog.setMessage("Registering please wait..."); progressDialog.show(); StringRequest stringRequest = new StringRequest(Request.Method.POST, Constants.REGISTER, new Response.Listener<String>() { @Override public void onResponse(String response) { progressDialog.dismiss(); try { JSONObject jsonObject = new JSONObject(response); Toast.makeText(getApplicationContext(), jsonObject.getString("message"), Toast.LENGTH_LONG).show(); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { progressDialog.hide(); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); } }){ @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String, String> params = new HashMap<>(); params.put("reg_name", name); params.put("reg_pin", pin); return params; } }; RequestQueue requestQueue = Volley.newRequestQueue(this); requestQueue.add(stringRequest); } @Override public void onClick(View v) { if (v == RegisterBTN); registerUser(); } } 

My FragmentActivity

 public class Electrician_frag extends Fragment { public static Electrician_frag newInstance() { Electrician_frag fragment = new Electrician_frag(); return fragment; } public Electrician_frag(){ } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootview = inflater.inflate(R.layout.fragment_electrician, container, false); return rootview; } } 

Une autre activité fragmentée

 public class Painter_frag extends Fragment { public static Painter_frag newInstance(){ Painter_frag fragment = new Painter_frag(); return fragment; } public Painter_frag(){ } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootview = inflater.inflate(R.layout.fragment_painter, container, false); return rootview; } } 

My PainterFragment.xml

 <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/white"> <CheckBox android:id="@+id/checkBox_x" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginLeft="124dp" android:layout_marginStart="124dp" android:text="@string/a" android:textSize="20sp" android:textStyle="bold" /> <CheckBox android:id="@+id/checkBox_y" style="@android:style/Widget.Holo.Light.CompoundButton.CheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginLeft="70dp" android:layout_marginStart="70dp" android:layout_toEndOf="@+id/checkBox_x" android:layout_toRightOf="@+id/checkBox_x" android:text="@string/b" android:textSize="20sp" android:textStyle="bold" /> </RelativeLayout> </FrameLayout> 

Dans la mesure où j'ai compris votre question. Nous avons les scénarios suivants.
1. Vous avez MainActivity.
2. Dans cette MainActivity, vous essayez de mettre en place un formulaire d'inscription.
3. Dans le formulaire d'inscription, vous avez plusieurs fragments contenant des cases à cocher.
4. Lorsque vous cliquez sur le bouton Enregistrer (dans MainActivity), vous souhaitez publier des données qui dépendent si les cases sont vérifiées ou non.

Si c'est le scénario, vous pouvez facilement atteindre la cible en utilisant la bibliothèque de bus d'événement Otto ou la bibliothèque de bus d'événements de gava. De cette façon, vous aidez également à maintenir la modularité du code de l'application.

Je donne une brève info comment vous pouvez le faire.

Suivez les étapes ci-dessous pour obtenir la solution.

  1. Ajouter gradle dans votre projet

    compile 'com.squareup:otto:1.3.8'

  2. Créez une classe d'événements dans votre projet et créez un événement à poster chaque fois que le bouton REGISTER est cliqué. Par exemple, votre classe d'événements contiendra le code ci-dessous.

    public class Events { public static class RegisterEvent { public RegisterEvent() {} } }

  3. Créez une classe GlobalBus dans votre projet afin que vous puissiez accéder au même bus dans votre application. Ecrivez le code ci-dessous.

    public class GlobalBus { private static Bus sBus; public static Bus getBus(){ if (sBus == null) sBus = new Bus(); return sBus; } }

  4. Post RegisterEvent en utilisant la base de données otto eventbus lorsque le bouton REGISTER est cliqué.

    registerBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { GlobalBus.getBus().post(new Events.RegisterEvent()); } });

  5. Dans le fragment A, vous écrivez un code pour vous abonner au bus événementiel otto comme ci-dessous.

    GlobalBus.getBus().register(this);

  6. Dans le fragment A, écrivez une méthode de souscription pour vous abonner à l'événement (c.-à-d. RegisterEvent) afin que chaque fois que cet événement soit publié à partir de MainActivity, vous obtenez la notification et affichez le message approprié (c.-à-d. Si la case est cochée ou non). Vous pouvez écrire la méthode de souscription comme ci-dessous.

    @Subscribe public void showMessage(Events.RegisterEvent events) { /// Here, you need to check whether checkboxes are checked or not. Send message to the server depending on that. Repeat same process for every checkbox. }

  7. Répétez le même processus que l'étape 4 et 5 dans chaque fragment.

Remarque: Rappelez-vous que chaque fragment reçoit une notification lorsque le bouton Enregistrer est cliqué. Ensuite, il vérifiera les cases à cocher (que les cases soient vérifiées ou non) et envoyez la requête au serveur.

Remarque: si vous souhaitez en savoir plus sur la bibliothèque d'autobus Otto, vous pouvez vérifier https://tutorialwing.com/otto-event-bus-tutorial-example/
De plus, si vous souhaitez utiliser le gibier d'événements Guava, vous pouvez vérifier https://tutorialwing.com/android-eventbus-library-example/
Les deux bibliothèques ont des avantages et des inconvénients.