当前位置: 首页 > 知识库问答 >
问题:

如何在Android中给出一个活动到一个片段之间的信息?

邵赞
2023-03-14

我有一个片段和一个活动,活动有3个编辑文本和一个图像。您可以从您的设备上传图像。但要知道,我正在尝试连接两个片段,并将活动B中的所有信息传递给片段A。

片断有一个编辑配置文件的按钮,3个TextView和一个ImageView,如果你点击这个按钮,你就会转到活动,在那里你有3个编辑文本(名称,电子邮件和描述),你有一个从你的设备上传图像的按钮。和保存更改的last按钮。

我想用save按钮保存更改,并将edittext和图像的信息给片段。

我在爪哇做的事。

片段文件

  public class NotificationFragment extends Fragment {
    private static String name;
    private static String mail2;
    private static String des;
    Button btnclose;
    Button btnedit;
    Button btnDisponibles;
    Button btnFinalizadas;
    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;
    public NotificationFragment() {
        // Required empty public constructor
    }
    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment HomeFragment.
     */
    String name2;
    String e_mail;
    String description;
    // TODO: Rename and change types and number of parameters
    public static NotificationFragment newInstance(String param1, String param2) {
        NotificationFragment fragment = new NotificationFragment();
        Bundle args = new Bundle();
        args.putString(name, param1);
        args.putString(mail2, param2);
        args.putString(des,"");
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            name2 = getArguments().getString("name");
            e_mail = getArguments().getString("email");
            description = getArguments().getString("descripcion");
        }
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_notification, container, false);
        TextView nombre, email, descripcion;
        nombre = (TextView) view.findViewById(R.id.txtNombre);
        email = (TextView) view.findViewById(R.id.txtemail);
        descripcion = (TextView) view.findViewById(R.id.txtdescripcion);
        nombre.setText(name);
        email.setText(e_mail);
        descripcion.setText(description);

        btnedit = (Button) view.findViewById(R.id.btneditar);
        btnedit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                editar();
            }
        });    
        return view;
    }
public class editarperfil extends AppCompatActivity {
    ImageView imagen;
    Button btnchange;
    Button btnout;
    EditText editNombre;
    EditText editEmail;
    EditText ediDescripcion;

    String name;
    String e_mail;
    String description;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_editarperfil);
        imagen = (ImageView) findViewById(R.id.imagenId);
        btnchange = (Button) findViewById(R.id.btnImagen);
        btnchange.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                cargarimagen();
            }
        });
        btnout = (Button) findViewById(R.id.btnGuardar);
        btnout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                salir();
            }
        });
    }


    private void cargarimagen(){
        Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        intent.setType("image/");
        startActivityForResult(intent.createChooser(intent, "Seleccione la aplicación"), 10);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Uri path=data.getData();
        imagen.setImageURI(path);
    }
    private void salir()
    {
        Bundle bundle = new Bundle();
        bundle.putString("name", editNombre.getText().toString());
        bundle.putString("email", editEmail.getText().toString());
        bundle.putString("descripcion", ediDescripcion.getText().toString()); // Put anything what you want

        NotificationFragment fragment2 = new NotificationFragment();
        fragment2.setArguments(bundle);

    }

共有1个答案

璩浩广
2023-03-14

从一个活动中,您可以将数据发送到一个片断,其目的是:

Bundle bundle = new Bundle();
bundle.putString("message", "From Activity");

// Set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);

并在fragment onCreateView方法中接收片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
    String strtext = getArguments().getString("message");

    return inflater.inflate(R.layout.fragment, container, false);
}

此方法也适用于多个片段。只需使用setarguments()方法。

您还可以使用第三个库在活动和片段之间传输数据,如EventBus:https://github.com/greenrobot/eventBus

 类似资料:
  • 我已经完成了导航,现在进入第一个片段。在第一个片段中有两个按钮,我需要通过按下这些按钮来切换到一个新的活动。我不明白如何正确地实施它。我犯了一个错误。 代码,eror

  • 我想在Android的一个活动中添加两个片段。但在加法时,它给出了错误; activity_main.xml 片段的布局1 片段2的布局

  • 我有一个疑问,想澄清一些关于包含多个片段的活动的观点。 我有10个片段与一个活动(HomeActivity.java)相连;此活动包含一个导航抽屉和工具栏,带有多个图标,如搜索、添加、删除、后退按钮等。 我遵循的结构如下:, 用户点击抽屉菜单中的任何项目,我正在加载片段, 碎片加载- 我正在根据HomeActivity本身中的片段更改标题名称,基于工具栏。 我的导航抽屉项目只有一个片段,在frag

  • 我想按下mainactivity中的一个按钮,该按钮将启动一个包含片段的新活动的意图。我写了一个主要的活动。带有main活动和第二个_活动按钮的xml。带有片段的xml。当我单击按钮时,第二个活动将由于xml中的片段而崩溃。我已经添加了一个标志,但它没有帮助。该应用程序的想法是通过按下主活动中的按钮,在第二个活动中获取谷歌地图。 我希望你能帮助我:/ 主要活动: 亚活性: activity_mai

  • 我也看了这段视频,并阅读了以下问题: > 共享ViewModel以帮助片段和父活动之间的通信 从另一个片段调用fragmentMethod,但不能在ParentFragmentActivity的视图分页器中引用它们 “我的上帝”对这个问题的答复很有帮助,但我仍然不确定在我的情况下做什么是最好的事情,因为我有一个用户可以输入数据的片段,而相同的片段也应该查看数据作为输入的结果。(也许我的第一个错误是