将数据从活动传输到片段(Transfer data from activity to fragment)

编程入门 行业动态 更新时间:2024-10-19 20:28:16
将数据从活动传输到片段(Transfer data from activity to fragment)

当MainActivity中的onTimeSet触发到DataFragment并刷新时,如何传输数据? 当点击setTodayBtn时触发该进程。

主要活动:

public class MainActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { public static MySQLiteHelper db; private ViewPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = findViewById(R.id.pager); adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new DataFragment(), "Data"); adapter.addFragment(new SummaryFragment(), "Summary"); adapter.addFragment(new VacationFragment(), "Missing"); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { int currentPosition = 0; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { FragmentLifecycle fragmentToHide = (FragmentLifecycle) adapter.getItem(currentPosition); fragmentToHide.onPauseFragment(); FragmentLifecycle fragmentToShow = (FragmentLifecycle) adapter.getItem(position); fragmentToShow.onResumeFragment(); currentPosition = position; } @Override public void onPageScrollStateChanged(int state) { } }); TabLayout tabLayout = findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); } @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { //Transfer i data to DataFragment //Refresh DataFragment } }

数据片段:

public class DataFragment extends Fragment implements FragmentLifecycle{ private Button setTodayBtn; public DataFragment() { } public static DataFragment newInstance(String param1, String param2) { DataFragment fragment = new DataFragment(); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View RootView = inflater.inflate(R.layout.fragment_data, container, false); setTodayBtn = RootView.findViewById(R.id.button_set_today); setTodayBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { DialogFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getFragmentManager(), "timePicker"); } }); return RootView; } private void refreshData() { } @Override public void onAttachFragment(Fragment childFragment) { super.onAttachFragment(childFragment); } @Override public void onDetach() { super.onDetach(); } @Override public void onPauseFragment() { } @Override public void onResumeFragment() { refreshData(); } public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); } }

TimePickerFragment:

public class TimePickerFragment extends DialogFragment { private TimePickerDialog.OnTimeSetListener mListener; private Context context; @Override public void onAttach(Context context) { super.onAttach(context); this.context = context; try { mListener = (TimePickerDialog.OnTimeSetListener) context; } catch (ClassCastException e) { throw new ClassCastException(context.toString() + " must implement OnTimeSetListener"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); return new TimePickerDialog(context, mListener, hour, minute, DateFormat.is24HourFormat(context)); } }

how can I transfer data when onTimeSet at MainActivity triggered to DataFragment and refresh it? The proccess triggered when setTodayBtn clicked.

Main Activity:

public class MainActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { public static MySQLiteHelper db; private ViewPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = findViewById(R.id.pager); adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new DataFragment(), "Data"); adapter.addFragment(new SummaryFragment(), "Summary"); adapter.addFragment(new VacationFragment(), "Missing"); viewPager.setAdapter(adapter); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { int currentPosition = 0; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { FragmentLifecycle fragmentToHide = (FragmentLifecycle) adapter.getItem(currentPosition); fragmentToHide.onPauseFragment(); FragmentLifecycle fragmentToShow = (FragmentLifecycle) adapter.getItem(position); fragmentToShow.onResumeFragment(); currentPosition = position; } @Override public void onPageScrollStateChanged(int state) { } }); TabLayout tabLayout = findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); } @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { //Transfer i data to DataFragment //Refresh DataFragment } }

Data Fragment:

public class DataFragment extends Fragment implements FragmentLifecycle{ private Button setTodayBtn; public DataFragment() { } public static DataFragment newInstance(String param1, String param2) { DataFragment fragment = new DataFragment(); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View RootView = inflater.inflate(R.layout.fragment_data, container, false); setTodayBtn = RootView.findViewById(R.id.button_set_today); setTodayBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { DialogFragment newFragment = new TimePickerFragment(); newFragment.show(getActivity().getFragmentManager(), "timePicker"); } }); return RootView; } private void refreshData() { } @Override public void onAttachFragment(Fragment childFragment) { super.onAttachFragment(childFragment); } @Override public void onDetach() { super.onDetach(); } @Override public void onPauseFragment() { } @Override public void onResumeFragment() { refreshData(); } public interface OnFragmentInteractionListener { void onFragmentInteraction(Uri uri); } }

TimePickerFragment:

public class TimePickerFragment extends DialogFragment { private TimePickerDialog.OnTimeSetListener mListener; private Context context; @Override public void onAttach(Context context) { super.onAttach(context); this.context = context; try { mListener = (TimePickerDialog.OnTimeSetListener) context; } catch (ClassCastException e) { throw new ClassCastException(context.toString() + " must implement OnTimeSetListener"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); return new TimePickerDialog(context, mListener, hour, minute, DateFormat.is24HourFormat(context)); } }

最满意答案

public class MainActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { //... private DataFragment dataFragment; private ViewPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = findViewById(R.id.pager); adapter = new ViewPagerAdapter(getSupportFragmentManager()); dataFragment = new DataFragment(); adapter.addFragment(dataFragment, "Data"); adapter.addFragment(new SummaryFragment(), "Summary"); adapter.addFragment(new VacationFragment(), "Missing"); viewPager.setAdapter(adapter); } //.... @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { dataFragment.setData(i); adapter.notifyDataSetChanged(); } }

您可能还需要在getItemPosition()从getItemPosition()返回POSITION_NONE

public class MainActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener { //... private DataFragment dataFragment; private ViewPagerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = findViewById(R.id.pager); adapter = new ViewPagerAdapter(getSupportFragmentManager()); dataFragment = new DataFragment(); adapter.addFragment(dataFragment, "Data"); adapter.addFragment(new SummaryFragment(), "Summary"); adapter.addFragment(new VacationFragment(), "Missing"); viewPager.setAdapter(adapter); } //.... @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { dataFragment.setData(i); adapter.notifyDataSetChanged(); } }

You may also need to return POSITION_NONE from getItemPosition() inside your PagerAdapter

更多推荐

本文发布于:2023-07-22 09:56:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1219151.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:片段   数据   Transfer   fragment   activity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!