【问题标题】:Pass data from Activity to Fragment in another Activity将数据从 Activity 传递到另一个 Activity 中的 Fragment
【发布时间】:2020-09-28 15:06:14
【问题描述】:

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

当我点击选择按钮时,会打开一个 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);
}

【问题讨论】:

    标签: java android android-studio android-layout android-fragments


    【解决方案1】:

    有两种方法可以做到这一点。 第一个使用回调,第二个使用捆绑。 在第一种方式中,您可以创建一个接口并在您的片段中实现并将其传递给您的活动。当用户单击日期时,您使用此接口回调参数。 第二种方式使用这样的捆绑包。 在您的片段中创建一个这样的构造函数并在您的活动中调用它:

    public static YourFragment getInstance(obj yourParameter){
        Bundle bundle = new Bundle();
        bundle.putString("edttext", "From Activity");
        // set Fragmentclass Arguments
        YourFragment fragobj = new YourFragment ();
        fragobj.setArguments(bundle);
    return fragobj;
    }
    

    在onCreate方法中这样获取obj:

    String strtext = getArguments().getString("edttext"); 
    

    【讨论】:

    • 它不起作用。也许你可以在我的代码中告诉我?
    • 你为什么在课堂上使用片段?为什么需要这门课?
    • 当我点击“笔记”时,这个容器会切换到笔记片段、“任务” - 任务片段和“目标” - 目标片段。这就是我需要它的原因。也许我这样做的方式不对,你怎么看?
    • 绝对是的。你不需要这门课。您只需使用过渡来更改片段。
    猜你喜欢
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 1970-01-01
    相关资源
    最近更新 更多