2016-11-17 13 views
0

私はMainActivityでこのメソッドを使用していますが、フラグメントのボタンに両方を使用したいのですが、フラグメント内のEditTextのデータをアクティビティに送信してボタンを使用する方法がわかりません。EditTextの値をフラグメントからアクティビティに引き出す方法は?

public void alta(View v) { 
 
     AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this); 
 
     SQLiteDatabase bd = admin.getWritableDatabase(); 
 
     String nome = et1.getText().toString(); 
 
     String edad = et2.getText().toString(); 
 
     String geno = et3.getText().toString(); 
 
     String curp = et4.getText().toString(); 
 
     ContentValues registro = new ContentValues(); 
 
     registro.put("nombre", nome); 
 
     registro.put("edad", edad); 
 
     registro.put("genero", geno); 
 
     registro.put("curp", curp); 
 
     bd.insert("usuarios", null, registro); 
 
     bd.close(); 
 
     et1.setText(""); 
 
     et2.setText(""); 
 
     et3.setText(""); 
 
     et4.setText(""); 
 
     Toast.makeText(this, "Se cargaron los datos", 
 
       Toast.LENGTH_SHORT).show(); 
 
    } 
 

 
    public void modificacion(View v) { 
 
     AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this); 
 
     SQLiteDatabase bd = admin.getWritableDatabase(); 
 
     String nome = et1.getText().toString(); 
 
     String edad = et2.getText().toString(); 
 
     String geno = et3.getText().toString(); 
 
     String curp = et4.getText().toString(); 
 
     ContentValues registro = new ContentValues(); 
 
     registro.put("nombre", nome); 
 
     registro.put("edad", edad); 
 
     registro.put("genero", geno); 
 
     registro.put("curp", curp); 
 
     int cant = bd.update("usuarios", registro, "curp=" + curp, null); 
 
     bd.close(); 
 
     if (cant == 1) 
 
      Toast.makeText(this, "se modificaron los datos", Toast.LENGTH_SHORT) 
 
        .show(); 
 
     else 
 
      Toast.makeText(this, "no existe un usuario con ese nombre", 
 
        Toast.LENGTH_SHORT).show(); 
 
    }

私は、フラグメントのクラスでこれを持っているが、私はEditTexts値を渡す方法がわかりません。

public class Fragment1 extends Fragment { 
 

 
    EditText iet1,iet2,iet3,iet4; 
 

 
    @Override 
 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
 
     super.onViewCreated(view, savedInstanceState); 
 
     iet1 = (EditText) getActivity().findViewById(R.id.et1); 
 
     iet2 = (EditText) getActivity().findViewById(R.id.et2); 
 
     iet3 = (EditText) getActivity().findViewById(R.id.et3); 
 
     iet4 = (EditText) getActivity().findViewById(R.id.et4); 
 
    } 
 

 
    public Fragment1() { 
 
    } 
 

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 
     View rootView = inflater.inflate(R.layout.fragmento1, container, false); 
 

 
     return rootView; 
 
    } 
 
}

+0

私はsqliteでは動作しませんでしたが、フラグメントをアクティビティに送信するためのメソッドを使用してデータを共有し、アクティビティ内でそのインターフェイスを実装し、フラグメント内のonViewCreateからそのインターフェイスをインスタンス化し、このメソッドを使用してここにデータを送信してください。チュートリアルhttps://www.youtube.com/watch?v=VyyGP_d0Ia8 –

+0

インテントチェックを使用してください[This](http://stackoverflow.com/a/7325248/6747577) –

答えて

0

まず、活動はこれが最初に動作します(直接の断片の内部のビューにアクセスしようとはしませんが、エッジに例が無効な参照にクラッシュを引き起こすことが重要です)。私が代わりに提案するのは、MainActivityのインタフェースを作成して、そのフラグメントをアクティビティに通知することです。

public class MainActivity { 
    String textArr[4] = new String[4]; 
    public void setEditTextValue(String text, int id) { 
     textArr[id] = text; 
    } 
} 

public class Fragment1 extends Fragment { 

    public void updateData() { 
     MainActivity main = (MainActivity)getActivity(); 
     main.setEditTextValue(iet1.getText().toString(), 0); 
     main.setEditTextValue(iet2.getText().toString(), 1); 
     main.setEditTextValue(iet3.getText().toString(), 2); 
     main.setEditTextValue(iet4.getText().toString(), 3); 
     main.modificacion(); // Which doesn't need view and can just use the data saved in the array 
    } 
} 
+0

これは悪い解決方法です。フラグメントを他のアクティビティと再利用できるように、インタフェースを使用してフラグメントをアクティビティから分離する必要があります。 –

+0

@Abdenaceur、あなたは明らかにあなたが示唆していることを行うことはできますが、時には(たぶんほとんどの場合でも)、フラグメントは1つのアクティビティーしか持たず、一般化する必要はなく、 。だから、「悪い」と「良い」はあなたの特定のニーズに依存します。 –

関連する問題