从活动获取片段的TextView数据

时间:2018-11-19 13:06:33

标签: android

我想将片段的textview字段中的数据传递给活动方法,该方法将数据插入sqlite数据库。

这是我的TextView片段:

    public class BandasFragment extends Fragment {

        private EditText et_codigo, et_nombre, et_genero, et_descripcion;

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

            // Inflate the layout for this fragment
            View vistaBandas = inflater.inflate(R.layout.fragment_bandas, container, false);

            et_codigo = (EditText)vistaBandas.findViewById(R.id.txt_codigo);
            et_nombre = (EditText)vistaBandas.findViewById(R.id.txt_nombre);
            et_genero = (EditText)vistaBandas.findViewById(R.id.txt_genero);
            et_descripcion = (EditText)vistaBandas.findViewById(R.id.txt_descripcion);



            return vistaBandas;
        }
    }

这是我将数据插入SQlite数据库的活动方法。因此,我需要将此方法与片段的TextView字段进行通信,或将数据从片段传输到此方法。

public void Registrar(View view){

        AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1);
        SQLiteDatabase BaseDeDatos = admin.getWritableDatabase();

        String codigo =  et_codigo.getText().toString();
        String nombre = et_nombre.getText().toString();
        String genero = et_genero.getText().toString();
        String descripcion = et_descripcion.getText().toString();


        if(!codigo.isEmpty()){
            ContentValues registro = new ContentValues();

            registro.put("codigo", codigo);
            registro.put("nombre", nombre);
            registro.put("genero", genero);
            registro.put("descripcion", descripcion);


            BaseDeDatos.insert("banda", null, registro);

            BaseDeDatos.close();
            et_codigo.setText("");
            et_nombre.setText("");
            et_genero.setText("");
            et_descripcion.setText("");


            Toast.makeText(this,"Registro exitoso", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(this,"Debes llenar todos los campos",Toast.LENGTH_SHORT).show();
        }
    }

2 个答案:

答案 0 :(得分:1)

我们可以通过创建界面来访问片段文本视图中的数据,该界面是调解员bw活动和片段

  1. 首先,您需要使用方法创建一个接口。(DataFromFragment.java)

    public interface TestListener { public String listener(String result; }

2。第三步,您需要在Fragment中重写onAttach方法,在该方法中,我们将获得父活动上下文。这样我们就可以直接获取接口方法。

   public void onAttach(Context context) {
    super.onAttach(context);
    try {
        mListener = (TestListener) context;
    } catch (ClassCastException e) {
        throw new ClassCastException(context.toString() + e.getMessage());
    }
}

3。在第四步中,您需要在活动中实施接口。

public void listener(String result) {
    Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
}
  1. 第五步,从片段方法调用接口方法。

    public void returnData(){         mListener.listener(“ Ashok”);     }

  2. 最终从活动中调用returndata()方法以从片段中获取结果

    FragmentManager fm = getFragmentManager(); BlankFragment f2 =(BlankFragment)fm.findFragmentById(R.id.fragment); f2.returnData();

答案 1 :(得分:0)

如果您的片段处于您要发送数据的同一活动下,则只需在该活动中创建一个新方法或更新您的Registrar方法,而您的片段已成为该活动的一部分,因此只需在片段中访问此方法并传递您的方法的价值。您的BandasFragment将像这样:

public class BandasFragment extends Fragment {

private EditText et_codigo, et_nombre, et_genero, et_descripcion;
RegistrarActivity registrarActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    // Inflate the layout for this fragment
    View vistaBandas = inflater.inflate(R.layout.fragment_bandas, container, false);

    et_codigo = (EditText)vistaBandas.findViewById(R.id.txt_codigo);
    et_nombre = (EditText)vistaBandas.findViewById(R.id.txt_nombre);
    et_genero = (EditText)vistaBandas.findViewById(R.id.txt_genero);
    et_descripcion = (EditText)vistaBandas.findViewById(R.id.txt_descripcion);


    registrarActivity = (RegistrarActivity) getActivity();
    registrarActivity.getData(et_codigo.getText().toString(),
                              et_nombre.getText().toString(), 
                              et_genero.getText().toString(),
                              et_descripcion.getText().toString());

    return vistaBandas;
}

您的课程将如下所示:

public class RegistrarActivity extends AppCompatActivity {

String codigo,nombre,genero,descripcion;

public void Registrar(View view){

    AdminSQLiteOpenHelper admin = new AdminSQLiteOpenHelper(this, "administracion", null, 1);
    SQLiteDatabase BaseDeDatos = admin.getWritableDatabase();



    if(!codigo.isEmpty()){
        ContentValues registro = new ContentValues();

        registro.put("codigo", codigo);
        registro.put("nombre", nombre);
        registro.put("genero", genero);
        registro.put("descripcion", descripcion);


        BaseDeDatos.insert("banda", null, registro);

        BaseDeDatos.close();
        et_codigo.setText("");
        et_nombre.setText("");
        et_genero.setText("");
        et_descripcion.setText("");


        Toast.makeText(this,"Registro exitoso", Toast.LENGTH_SHORT).show();
    } else{
        Toast.makeText(this,"Debes llenar todos los campos",Toast.LENGTH_SHORT).show();
    }
}

public void getData(String codigo,String nombre,String genero,String descripcion){
    this.codigo = codigo;
    this.nombre = nombre;
    this.genero = genero;
    this.descripcion = descripcion;
}

}