0

私は最初の断片で作業しています...主なアクティビティでは、私はspinnerListnerを持っていて、断片的なコンテナ内の項目が変更されると断片的な変更が発生し、fragment.xmlファイルにいくつかのチェックボックスが作成されました...私はちょうどチェックしたすべてのチェックボックスに対して別の値 "NameoftheCheckbox"とチェックサムチェックボックス(コンテナーに表示されていないフラグメントからも)ごとに別の値 "Null"をポストして保存するだけです。私は私のメインの活動でのregisterUser機能により名前とピンを保存しようとしています道...のような私はフラグメントの中にチェックボックスを持っていて、私はそれが私の主な活動の中にある登録ボタンのクリックでいくつかのデータを投稿したいですか?

マイ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(); 
 

 
    } 
 
}

マイ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; 
 
    } 
 

 
}

別のフラグメント活動

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; 
 
    } 
 
}

マイ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>

+0

getActivity()にclicklistenerを登録します。 –

+0

すべてのフラグメント 'CheckBox'にパブリックゲッターを追加し、' registerUser() 'メソッドでそれらの値を読み出そうとすることができます。 – redead

+0

こんにちはJaydeep patel私のコードを編集してくれますか? –

答えて

0

限り私はあなたの質問を理解して。私たちは以下のシナリオを持っています。
1. MainActivityがあります。
2.このMainActivityでは、登録フォームを実装しようとしています。
3.登録フォームには、チェックボックスを含む複数のフラグメントがあります。
4.登録ボタン(MainActivity内)をクリックすると、チェックボックスのチェックの有無に応じていくつかのデータをポストします。

これがシナリオの場合、OttoイベントバスライブラリまたはGuavaイベントバスライブラリを使用して簡単にターゲットを達成できます。この方法は、アプリコードのモジュール性を維持するのにも役立ちます。

私は簡単な情報を提供しています。

解決策を得るには、以下の手順に従ってください。

  1. は、プロジェクトに

    compile 'com.squareup:otto:1.3.8'

  2. は、イベントクラスを作成し、プロジェクトにGradleのを追加し、登録ボタンがクリックされるたび投稿するイベントを作成します。たとえば、イベントクラスには以下のコードが含まれます。

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

  3. あなたがアプリケーション全体で同じバスにアクセスできるように、プロジェクトにGlobalBusクラスを作成します。コードの下にそれを書いてください。登録ボタンをクリックしたときにeventbusライブラリを使用してオットー

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

  4. ポストRegisterEventイベント。フラグメントAでは

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

  5. 、あなたは以下のようにオットーeventbusを購読するコードを記述します。フラグメントAでは

    GlobalBus.getBus().register(this);

  6. 、そして、このイベントはMainActivityから投稿されるたびに、あなたが通知を取得し、適切なメッセージを表示するようにイベント(すなわちRegisterEvent)を購読する購読する方法を書きます(すなわち、チェックボックスがチェックされているかどうか)。以下のようにsubscribeメソッドを書くことができます。すべての断片のステップ4及び5と

    @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. 繰り返し同じプロセス。

注:各フラグメントは、登録ボタンがクリックされたときに通知を受け取ります。チェックボックスがチェックされているかどうかをチェックし、サーバーに要求を送信します。

注:オットー・イベントバスライブラリについての詳細をお知りになりたい場合は、あなたがグアバeventbusを使用する場合は、https://tutorialwing.com/android-eventbus-library-example/
両方のライブラリ、いくつかの長所と短所を持っているを確認することができ、またhttps://tutorialwing.com/otto-event-bus-tutorial-example/
を確認することができます。

+0

さて、それを試してみましょう。それから私はあなたに知らせるでしょう。 –

+0

と...私はすでに登録プロセスのためにコンパイルボレーを使用しています...問題はないでしょうか? –

+0

オットーまたはグアバのイベントバスは、ボレーライブラリとは関係ありません。イベントバスはあなたのアプリ内でいくつかのメッセージをブロードキャストするために使われます。 Volleyライブラリは、ネットワークコールの管理に使用されます。 –

関連する問題