如何将数据从活动A传递到活动B中的片段?

时间:2020-09-28 00:14:15

标签: java android

我需要将数据从活动“ MainCalendar”传递到活动“添加”中的片段“ AddTaskFragment”。我在片段中有一个按钮,用于打开活动“ MainCalendar”,在其中选择日历中的日期,然后需要将此日期发送到片段中。

当我单击“选择按钮”时,将打开一个MainCalendar,用户需要选择日期,此后,活动关闭,然后我想将MainCalendar中的日期放在“ Choose Button”的文本中。 / p>

Add Activity with a fragment, MainCalendar活动:MainCalendar

MainCalendar.class:

public class MainCalendar extends AppCompatActivity {
private CalendarView Calendar;
private String date;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_calendar);
    Calendar = (CalendarView) findViewById(R.id.calendarView);



    Calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
            date = (dayOfMonth+"/"+month+"/"+year);
            System.out.println(date);
            Intent intent = new Intent(MainCalendar.this, Add.class);
            intent.putExtra("DATE_KEY", date);
            finish();
        }

    });
}

添加类:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add);

    BottomNavigationView bottomNav = findViewById(R.id.bottom_nav);
    bottomNav.setSelectedItemId(R.id.add);
    Button notes_button = findViewById(R.id.notes_btn);
    Button tasks_button = findViewById(R.id.tasks_btn);
    Button goals_button = findViewById(R.id.goals_btn);
    RadioButton rb = findViewById(R.id.choose_day_btn);


    String date = null;
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        //The key argument here must match that used in the other activity
        date = extras.getString("DATE_KEY");
    }

    AddTasksFragment frag = new AddTasksFragment();

    Bundle bundle = new Bundle();
    bundle.putString("DATE_KEY", date);
    frag.setArguments(bundle);

    Fragment fragment1 = new AddTasksFragment();
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment1).commit();


    bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {

            switch (item.getItemId()){
                case R.id.notes:
                    startActivity(new Intent(getApplicationContext(), Notes.class));
                    overridePendingTransition(0,0);
                    return true;
                case R.id.add:
                    return true;
                case R.id.tasks:
                    startActivity(new Intent(getApplicationContext(), Tasks.class));
                    overridePendingTransition(0,0);
                    return true;
                case R.id.goals:
                    startActivity(new Intent(getApplicationContext(), Goals.class));
                    overridePendingTransition(0,0);
                    return true;
                case R.id.statistics:
                    startActivity(new Intent(getApplicationContext(), Statistics.class));
                    overridePendingTransition(0,0);
                    return true;

            }
            return false;
        }
    });

    Fragment fragment = new AddTasksFragment();
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment).commit();

    tasks_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment fragment = new AddTasksFragment();
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment).commit();
        }
    });

    notes_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment fragment = new AddNotesFragment();
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment).commit();
        }
    });

    goals_button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Fragment fragment = new AddGoalsFragment();
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,fragment).commit();
        }
    });

//

AddTaskFragment.class,位于Add.class中

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

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

    }

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    subtask_btn = (Button) view.findViewById(R.id.add_subtask_btn);
    subtask_name = (EditText) view.findViewById(R.id.subtask_name);
    task_name = (EditText) view.findViewById(R.id.task_name);
    lin_lay = (LinearLayout) view.findViewById(R.id.linear_layout);
    sb_lay = (LinearLayout) view.findViewById(R.id.subtask_lay);
    apply_btn = (Button) view.findViewById(R.id.apply_btn);

    rgDay = (RadioGroup) view.findViewById(R.id.date_group);
    rgPriority = (RadioGroup) view.findViewById(R.id.priority_group);
    todayBtn = (RadioButton) view.findViewById(R.id.today_btn);
    tomorrowBtn = (RadioButton) view.findViewById(R.id.tomorrow_btn);
    chooseDayBtn = (RadioButton) view.findViewById(R.id.choose_day_btn);
    lowPrBtn = (RadioButton) view.findViewById(R.id.low_btn);
    mediumPrBtn = (RadioButton) view.findViewById(R.id.medium_btn);
    highPrBtn = (RadioButton) view.findViewById(R.id.high_btn);


    firebaseAuth = FirebaseAuth.getInstance();
    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    dataBase = FirebaseDatabase.getInstance().getReference(TASKS_KEY);
    this.getResources().getDisplayMetrics();


    subtask_btn.setOnClickListener(this);
    apply_btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            writeTask();
        }
    });
    chooseDayBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getActivity(), MainCalendar.class);
            startActivity(intent);
        }
    });
    String data;
    data = getActivity().getIntent().getStringExtra(DATE_KEY);
    }

@Override
public void onClick(View v) {
    addView();
}



private void writeTask() {
    String Task;
    Task = task_name.getText().toString();
    dataBase.push().setValue(Task);

    String[] subTasks = new String[sb_lay.getChildCount()];
    for (int i = 0; i < sb_lay.getChildCount(); i++) {

        View subtaskView = sb_lay.getChildAt(i);

        EditText editTextName = (EditText) subtaskView.findViewById(R.id.subtask_name);
        subTasks[i] = editTextName.getText().toString();

        dataBase.child(Task).child("Subtasks").push().setValue(subTasks[i]);
        }
        dataBase.child(Task).push().setValue(getDay());
}

private String getDay(){
    String day=null;

    if(todayBtn.isChecked()){
        Date currentTime = Calendar.getInstance().getTime();
        day = currentTime.toString();
    }
    else if(tomorrowBtn.isChecked()){
        Date dt = new Date();
        Calendar c = Calendar.getInstance();
        c.setTime(dt);
        c.add(Calendar.DATE, 1);
        dt = c.getTime();
        day = dt.toString();
    }else if(chooseDayBtn.isChecked()) {
        day =  getArguments().getString("DATE_KEY");
        System.out.println(" Date is choosed ----------------------------------------------------------------------------" + day);
        chooseDayBtn.setText(day);
    }
    return day;
}

private void addView(){
    final View subtaskView = getLayoutInflater().inflate(R.layout.subtask_raw, null, false);

    EditText editText = (EditText)subtaskView.findViewById(R.id.subtask_name);
    ImageView imageClose = (ImageView)subtaskView.findViewById(R.id.remove_subtask);

    imageClose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            removeView(subtaskView);
        }
    });

    sb_lay.addView(subtaskView);
    String day;
    day =  getArguments().getString("DATE_KEY");
    System.out.println(" Date is choosed " + day);

}

private void removeView(View view){
    sb_lay.removeView(view);
}

1 个答案:

答案 0 :(得分:0)

据我了解,您必须进行活动(Activity AActivity B),并且活动B中有一个片段。您要做的是将活动A中的某些数据发送到该片段中原因。

首先让我们注意一下,如果不启动数据,就无法直接将数据发送到任何活动片段。因此,要将数据发送到片段,您必须首先将其从Activity A传递到Activity B,然后再将其从Activity B传递到Fragment第二步。

数据类型非常重要。如果要发送自定义类型(模型Java类),则必须将其定义为Parcelable,或者如果它是原始类型,例如intfloat,则可以直接发送它

这是用Java实现的方法

ActivityA.java

class ActivityA extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activityA);

        // define your data here
        int data = 5;

        // define an intent to send the data to the second activity
        Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
        intent.putExtra("DATA_KEY", data);
        startActivity(intent);

    }
}

那么我们要做的是

  • 接收Activity B
  • 中的数据
  • 膨胀片段
  • 将数据传递到片段
class ActivityB extends Activity{


    Int data;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activityB);

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            //The key argument here must match that used in the other activity
            data = extras.getInt("DATA_KEY");
        }

        // Fragment instance
        FragmentClass frag = new FragmentClass();

        Bundle bundle = new Bundle();
        bundle.putInt("DATA_KEY", data );
        frag.setArguments(bundle);

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.fragment_container, mFeedFragment);
        fragmentTransaction.commit();
        

    }
}

,然后按照我们在Activity B

中收到的方式接收
相关问题