【问题标题】:How to get value from EditText from a fragment to activity?如何从片段到活动的 EditText 获取价值?
【发布时间】:2017-04-01 14:32:58
【问题描述】:

我的 MainActivity 中有这个方法,我想在片段上的按钮中同时使用这两种方法,但我不知道如何将片段中的 EditText 的数据发送到 Activity 并使用按钮。

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

【问题讨论】:

  • 我没有使用 sqlite,但是为了将数据从片段发送到活动,您可以创建一个带有共享数据方法的接口,在您的活动中实现该接口并从您的 onViewCreate 实例化该接口片段并使用该方法在这里发送数据一个很好的教程youtube.com/watch?v=VyyGP_d0Ia8
  • 尝试使用 Intent Check This
  • 使用接口从fragment到activity进行通信

标签: android sqlite android-fragments android-activity android-edittext


【解决方案1】:

首先,重要的是 Activity 不会尝试直接访问片段内部的视图(这最初会起作用,但在边缘情况下会由于无效引用而导致崩溃)。我建议改为在 MainActivity 中创建一个接口,让 Fragment 通知 Activity。

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

【讨论】:

  • 这是一个糟糕的解决方案,您必须使用接口将片段与活动分离,以便您可以将片段与其他活动重用。
  • @Abdenaceur,你显然可以按照你的建议去做,但是,有时(我认为,甚至大多数时候),一个片段只能有一个活动,然后你不需要概括事物你可以保持简单愚蠢。所以“坏”和“好”取决于您的具体需求。
猜你喜欢
  • 1970-01-01
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多