在同一活动中将数据片段传递给片段

2024-03-24

我有一些问题想询问有关在活动中将数据从一个片段传递到另一个片段的问题。我不知道该怎么做。有人可以帮忙吗? 这是我的代码。

ShareFragment.java

package com.example.user8.myapplication;


import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;


/**    
 * A simple {@link Fragment} subclass.
 */
public class ShareFragment extends Fragment implements             AdapterView.OnItemSelectedListener{

private Spinner spinner1,spinner2,spinner3;
private Button btn_submit,btn_selDate;
private FirebaseAuth auth;
FirebaseUser firebaseUser;

public ShareFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v = inflater.inflate(R.layout.fragment_share, container, false);

    btn_selDate = (Button) v.findViewById(R.id.btn_selDate);

    btn_selDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Initialize a new date picker dialog fragment
            DialogFragment dFragment = new DatePickerFragment();

            // Show the date picker dialog fragment
            dFragment.show(getFragmentManager(), "Date Picker");

        }
    });

    btn_submit = (Button) v.findViewById(R.id.btn_submit_food);

    spinner1 = (Spinner)v.findViewById(R.id.spinner_selectFood);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getContext(),R.array.spinner_food,R.layout.support_simple_spinner_dropdown_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner1.setAdapter(adapter);
    spinner1.setOnItemSelectedListener(this);

    spinner3 = (Spinner)v.findViewById(R.id.spinner_selectTime);
    ArrayAdapter<CharSequence> adapter3 = ArrayAdapter.createFromResource(getContext(),R.array.spinner_time,R.layout.support_simple_spinner_dropdown_item);
    adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner3.setAdapter(adapter3);
    spinner3.setOnItemSelectedListener(this);

    auth = FirebaseAuth.getInstance();

    btn_submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Food").push();
            firebaseUser = auth.getCurrentUser();
            String uid = firebaseUser.getUid();
            String u_food = spinner1.getSelectedItem().toString();
            String u_time= spinner3.getSelectedItem().toString();

            Food myFood = new Food(uid,u_food,"formatteddate",u_time);//data pass to here to save into firebase
            ref.setValue(myFood).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(getContext(), getString(R.string.share_food_success_msg), Toast.LENGTH_SHORT).show();
                        getActivity().finish();
                        startActivity(new Intent(getContext(), Main2Activity.class));
                    } else {
                        Toast.makeText(getContext(),  getString(R.string.share_food_fail_msg), Toast.LENGTH_SHORT).show();
                        getActivity().finish();
                        startActivity(new Intent(getContext(), Main3Activity.class));
                    }
                }
            });
        }
    });
    return v;
}

public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                AlertDialog.THEME_HOLO_LIGHT, this, year, month, day);

        /*
            add(int field, int value)
                Adds the given amount to a Calendar field.
         */
        // Add 3 days to Calendar
        calendar.add(Calendar.DATE, 3);

        dpd.getDatePicker().setMaxDate(calendar.getTimeInMillis());

        // Subtract 6 days from Calendar updated date
        calendar.add(Calendar.DATE, -6);

        // Set the Calendar new date as minimum date of date picker
        dpd.getDatePicker().setMinDate(calendar.getTimeInMillis());

        // So, now date picker selectable date range is 7 days only

        // Return the DatePickerDialog
        return dpd;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the chosen date
        TextView tv = (TextView) getActivity().findViewById(R.id.tv);

        // Create a Date variable/object with user chosen date
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(0);
        cal.set(year, month, day, 0, 0, 0);
        Date chosenDate = cal.getTime();

        // Format the date using style and locale
        DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US);
        String formattedDate = df.format(chosenDate);

        // Display the chosen date to app interface
        tv.setText(formattedDate);//formattedDate is the data that I want to pass to myFood.
    }
}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    String text = parent.getItemAtPosition(position).toString();
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
}

我的应用程序的流程是用户可以选择食物、选择日期(从当前日期算起 7 天)和时间列表,然后单击提交。数据库将接收所有数据并保存到 firebase 中。


我们可以使用Bundle发送数据fragment到另一个fragment

发送片段

RecievingFragment fragment = new RecievingFragment ();
Bundle args = new Bundle();
args.putString("Key", "Value");
fragment.setArguments(args);

getFragmentManager().beginTransaction().add(R.id.container, fragment).commit();

接收片段

In onCreateView新片段的:

String value = getArguments().getString("YourKey");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一活动中将数据片段传递给片段 的相关文章

随机推荐

  • Git 签出到特定目录

    所以 目前我正在努力合并两个分支 A and B 我正在合并到分支B 但我已将项目重组到不同的目录中 并且想做一个git checkout A path fileToGet各种各样的 意图是覆盖 但是变成了我的分支中的不同目录 为了保留文件
  • 解析 2 位数年份:使用未知日期模式设置基准日期

    用户将以不同模式输入日期到我的应用程序 对于两位数年份 他还必须确定枢轴日期 Example 图案 yy MM dd基准日期 70 我以编程方式添加当前千年和上个世纪以获得更多动态 gt 1970 69 04 22变成2069 04 22
  • 在没有“应用程序许可”的情况下获取访问者的 Facebook 信息——Yelp 是如何做到的?

    好的 我花了几个小时仔细研究有关 xFBML Open Graph 等的分散的 FB 文档 其中大部分似乎已被弃用 无论如何 当访问者访问我的网站 假设他们已经登录 FB 时 我试图获取他们的 Facebook 用户 ID 或姓名 图片或其
  • 连接 JSONArray

    我在用JSON数组 http www json org javadoc org json JSONArray html在下面org json包裹 我的第一个 JSONArray 是这样的 249404 VPR249404 249403 VP
  • C++ 中的作用域和返回值

    我重新开始使用 c 并正在考虑变量的范围 如果我在函数内有一个变量 然后我返回该变量 那么该变量在返回时不会因为它所在的作用域已结束而 死亡 吗 我已经尝试过使用返回字符串的函数 它确实有效 谁能解释一下吗 或者至少给我指出一些可以向我解释
  • 使用自适应布局的 UILabel 的不同字体大小

    在 Xcode 6 中 我们有一个称为自适应布局的新功能 通过使用它 我创建了一个新项目 在其中我需要根据布局具有不同的字体大小 在 iPhone 3 5 英寸屏幕中 我必须将字体大小设置为 17pt 而 iPhone 中的其他屏幕大小必须
  • 让 Grails 监听外部 IP 地址

    我启动了一个 Grails 应用程序来侦听默认端口 8080 并以 root 身份运行 grails 以侦听端口 80 grails Dserver port 80 run app 这在本地主机上运行得很好 但是当我从外部 IP 地址访问它
  • 动态获取 docker-compose 创建的正在运行的容器名称

    当我运行 docker compose 时 它 会创建一个 Web 容器和 postgres 容器 我想通过类似的方式手动触发我的 Django 测试运行 docker compose run web python manage py te
  • 对于系统文本的多语言支持 x 种语言来说,这是一个很好的设计吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这个实现的扩展性是否良好 要求是 系统必须支持x种语言 其中 x will 企业可以翻译的尽可能多的语言 所有系统维护的值 页面内容 电子邮件内
  • 使用 AVPlayer 传输音频

    当在表视图中选择一行但它不播放时 我尝试使用 AVPlayer 播放 URL 中的音频 我究竟做错了什么 这是代码 void tableView UITableView tableView didSelectRowAtIndexPath N
  • 如何在 Xcode 中使用 boost::multi precision::float128

    我正在尝试在 xCode 项目中使用 boost multi precision float128 我的编译器版本是 Apple clang 版本 11 0 0 clang 1100 0 20 17 目标 x86 64 apple darw
  • 检查模型是否存在,如果在 Laravel 中找不到则继续路由

    我有两个模型 我不想在其 URL 前面添加前缀 例如 用户和帖子 如果我有一个网址https example com title of the post https example com title of the post and htt
  • 正确确定日期字符串是否是该格式的有效日期

    我从 API 收到一个日期字符串 其格式为yyyy mm dd 我目前正在使用正则表达式来验证字符串格式 该格式工作正常 但我可以看到在某些情况下 根据字符串它可能是正确的格式 但实际上是无效的日期 IE 2013 13 01 例如 PHP
  • R包已安装但无法加载?

    我在 R 中安装了 digest 包 gt install packages digest Installing package into C Users user Documents R win library 3 3 as lib is
  • 为什么 Replace() 在我的 Python 函数中不起作用? [复制]

    这个问题在这里已经有答案了 这是实际代码 def replace exception chars string exception chars dict Old New old new exception chars keys list e
  • 如何更改时间选择器对话框片段的默认配色方案?

    我正在尝试更改时间选择器对话框片段的默认颜色 现在我不知道我应该做什么 这就是我设法将我的主题设置为 没有actionBar but this is the dialog i get 这是我的 xml 样式文件
  • 睡眠或暂停 NSThread

    我正在创建一个新线程 它每隔一定时间就运行我的方法之一 现在我正在做的事情如下 NSThread thread NSThread alloc initWithTarget self selector selector setUpTimerT
  • 如何向 clang-cl 添加 std=c++11 标志?

    我尝试在Windows下使用clang cl编译C 11程序 Clang cl 是 clang 的包装器 以便与 cl Visual Studio 编译器 更加兼容 我尝试添加 std c 11 and std c 11并且都被拒绝了 这并
  • Ruby on Rails:我的实际目标是什么?

    我一直在 Ruby on Rails 3 中构建应用程序 并且开始担心性能优化 现在我希望我的问题对于这个网站来说不太主观 但我对事实感兴趣 而不是讨论 所以这里是 虽然我试图让视图渲染得更快 但有一件事我根本不知道 我的目标是什么 给定一
  • 在同一活动中将数据片段传递给片段

    我有一些问题想询问有关在活动中将数据从一个片段传递到另一个片段的问题 我不知道该怎么做 有人可以帮忙吗 这是我的代码 ShareFragment java package com example user8 myapplication im