如何将数据添加到另一片段的片段中的RecyclerView(How to add Data to RecyclerView in Fragment From Another Fragment)

编程入门 行业动态 更新时间:2024-10-27 12:36:19
如何将数据添加到另一片段的片段中的RecyclerView(How to add Data to RecyclerView in Fragment From Another Fragment)

我有一个片段在ViewPager有一个RecyclrView和按钮,按钮要打开一个新的片段来填充数据显示在RecyclerView,我需要一种方式来获取这些数据,并在RecyclerView中显示iy,

这里是显示recyclerview +按钮的片段

public class ContractPlanFragment extends Fragment implements PlanRecyclerView.MyClickListener { public static final String MyPREFERENCES = "MyPrefs" ; private RecyclerView planRecyclerView; private RecyclerView.Adapter mAdapter; private List<Integer> framePhotoList ; private Button addPlan ; View rootView; List<Plan> planList ; private static final String ARG_KEY = "key"; private String mKey; private ContractInfoPage mPage; private PageFragmentCallbacks mCallbacks; private String plan_detials; private String palnDate; private String startTime; private String endTime; public static ContractPlanFragment create(String key) { Bundle args = new Bundle(); args.putString(ARG_KEY, key); ContractPlanFragment fragment = new ContractPlanFragment(); fragment.setArguments(args); return fragment; } public ContractPlanFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment rootView = inflater.inflate(R.layout.fragment_contract_plan, container, false); addPlan = (Button) rootView.findViewById(R.id.addNewPlan); planRecyclerView = (RecyclerView) rootView.findViewById(R.id.plan_view); planRecyclerView.setItemViewCacheSize(20); planRecyclerView.setDrawingCacheEnabled(true); planRecyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); planRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); SharedPreferences prefs = getActivity().getSharedPreferences(MyPREFERENCES , MODE_PRIVATE); plan_detials = prefs.getString("plan_detials", null); palnDate = prefs.getString("Date", null); startTime = prefs.getString("startTime", null); endTime = prefs.getString("endTime", null); Log.i("the valu" , palnDate + plan_detials); Plan p = new Plan(); p.setPlanDetails( plan_detials); p.setStartTime(palnDate); p.setEndTime(startTime); p.setPlanDate(endTime); planList = new ArrayList<>(); planList.add(p); planList.add(new Plan("تجربة ويا رب تزبط" ,"15/10/2018" ,"08:50" ,"13:20")); mAdapter = new PlanRecyclerView(planList , getContext()); planRecyclerView.setAdapter(mAdapter); addPlan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment addPlanFragment = new AddPlanFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.create_contract_layout, addPlanFragment ); // give your fragment container id in first parameter transaction.addToBackStack(null); // if written, this transaction will be added to backstack transaction.commit(); } }); return rootView; } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof PageFragmentCallbacks)) { throw new ClassCastException("Activity must implement PageFragmentCallbacks"); } mCallbacks = (PageFragmentCallbacks) activity; } @Override public void onDetach() { super.onDetach(); mCallbacks = null; } @Override public void onItemClick(int position, View v) { } @Override public void onResume() { super.onResume(); } }

这里是我填写数据的片段:

public class AddPlanFragment extends Fragment { private TextView tvDisplayTime; private TimePicker timePicker1; private DatePicker plan_date; View bottomSheetView; static EditText addDateText; static EditText startTime ; private EditText plan_detials_text ; Button savePlanBtn ,cancelBtn; static EditText endTime; SharedPreferences sharedpreferences; public static final String MyPREFERENCES = "MyPrefs" ; public AddPlanFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_add_plan, container, false); sharedpreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); addDateText = (EditText) rootView.findViewById(R.id.addDateText) ; startTime = (EditText) rootView.findViewById(R.id.startTime); endTime = (EditText) rootView.findViewById(R.id.endTime); plan_detials_text = (EditText) rootView.findViewById(R.id.plan_detials_text); savePlanBtn = (Button) rootView.findViewById(R.id.savePlanBtn); cancelBtn = (Button) rootView.findViewById(R.id.cancelBtn); addDateText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = new SelectDateFragment(); newFragment.show(getFragmentManager(), "DatePicker"); } }); startTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = new TimePickerFragment_start(); newFragment.show(getFragmentManager(), "DatePicker"); } }); endTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = new TimePickerFragment_end(); newFragment.show(getFragmentManager(), "DatePicker"); } }); cancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); savePlanBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString("plan_detials", plan_detials_text.getText().toString()); editor.putString("Date", addDateText.getText().toString()); editor.putString("startTime", startTime.getText().toString()); editor.putString("endTime",endTime.getText().toString()); editor.commit(); Intent go = new Intent(getActivity(),CreateContractActivity.class); // you pass the position you want the viewpager to show in the extra, // please don't forget to define and initialize the position variable // properly go.putExtra("viewpager_position", 6); startActivity(go); // getActivity().onBackPressed(); } }); return rootView; } public static class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar calendar = Calendar.getInstance(); int yy = calendar.get(Calendar.YEAR); int mm = calendar.get(Calendar.MONTH); int dd = calendar.get(Calendar.DAY_OF_MONTH); return new DatePickerDialog(getActivity(), this, yy, mm, dd); } public void onDateSet(DatePicker view, int yy, int mm, int dd) { populateSetDate(yy, mm+1, dd); } public void populateSetDate(int year, int month, int day) { addDateText.setText(month+"/"+day+"/"+year); } } public static class TimePickerFragment_start extends DialogFragment implements TimePickerDialog.OnTimeSetListener{ @Override public Dialog onCreateDialog(Bundle savedInstanceState){ // Get a Calendar instance final Calendar calendar = Calendar.getInstance(); // Get the current hour and minute int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); TimePickerDialog tpd = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar,this,hour,minute,false); // Return the TimePickerDialog return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute){ // Do something with the returned time startTime.setText(hourOfDay + ":" + minute); } } public static class TimePickerFragment_end extends DialogFragment implements TimePickerDialog.OnTimeSetListener{ @Override public Dialog onCreateDialog(Bundle savedInstanceState){ // Get a Calendar instance final Calendar calendar = Calendar.getInstance(); // Get the current hour and minute int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); TimePickerDialog tpd = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar,this,hour,minute,false); // Return the TimePickerDialog return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute){ // Do something with the returned time endTime.setText(hourOfDay + ":" + minute); } } }

并且我想要一种方法在保存数据后回到同一个片段,请提供任何帮助

I have a Fragment In ViewPager That have a RecyclrView And Button , the Button Going To open a New Fragment to Fill Data to display in RecyclerView , I need A way to fetch these data and to display iy in RecyclerView ,

here is the fragment that show recyclerview + button

public class ContractPlanFragment extends Fragment implements PlanRecyclerView.MyClickListener { public static final String MyPREFERENCES = "MyPrefs" ; private RecyclerView planRecyclerView; private RecyclerView.Adapter mAdapter; private List<Integer> framePhotoList ; private Button addPlan ; View rootView; List<Plan> planList ; private static final String ARG_KEY = "key"; private String mKey; private ContractInfoPage mPage; private PageFragmentCallbacks mCallbacks; private String plan_detials; private String palnDate; private String startTime; private String endTime; public static ContractPlanFragment create(String key) { Bundle args = new Bundle(); args.putString(ARG_KEY, key); ContractPlanFragment fragment = new ContractPlanFragment(); fragment.setArguments(args); return fragment; } public ContractPlanFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment rootView = inflater.inflate(R.layout.fragment_contract_plan, container, false); addPlan = (Button) rootView.findViewById(R.id.addNewPlan); planRecyclerView = (RecyclerView) rootView.findViewById(R.id.plan_view); planRecyclerView.setItemViewCacheSize(20); planRecyclerView.setDrawingCacheEnabled(true); planRecyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); planRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); SharedPreferences prefs = getActivity().getSharedPreferences(MyPREFERENCES , MODE_PRIVATE); plan_detials = prefs.getString("plan_detials", null); palnDate = prefs.getString("Date", null); startTime = prefs.getString("startTime", null); endTime = prefs.getString("endTime", null); Log.i("the valu" , palnDate + plan_detials); Plan p = new Plan(); p.setPlanDetails( plan_detials); p.setStartTime(palnDate); p.setEndTime(startTime); p.setPlanDate(endTime); planList = new ArrayList<>(); planList.add(p); planList.add(new Plan("تجربة ويا رب تزبط" ,"15/10/2018" ,"08:50" ,"13:20")); mAdapter = new PlanRecyclerView(planList , getContext()); planRecyclerView.setAdapter(mAdapter); addPlan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment addPlanFragment = new AddPlanFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.create_contract_layout, addPlanFragment ); // give your fragment container id in first parameter transaction.addToBackStack(null); // if written, this transaction will be added to backstack transaction.commit(); } }); return rootView; } @Override public void onAttach(Activity activity) { super.onAttach(activity); if (!(activity instanceof PageFragmentCallbacks)) { throw new ClassCastException("Activity must implement PageFragmentCallbacks"); } mCallbacks = (PageFragmentCallbacks) activity; } @Override public void onDetach() { super.onDetach(); mCallbacks = null; } @Override public void onItemClick(int position, View v) { } @Override public void onResume() { super.onResume(); } }

and here is the fragment that i fill data in it :

public class AddPlanFragment extends Fragment { private TextView tvDisplayTime; private TimePicker timePicker1; private DatePicker plan_date; View bottomSheetView; static EditText addDateText; static EditText startTime ; private EditText plan_detials_text ; Button savePlanBtn ,cancelBtn; static EditText endTime; SharedPreferences sharedpreferences; public static final String MyPREFERENCES = "MyPrefs" ; public AddPlanFragment() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View rootView = inflater.inflate(R.layout.fragment_add_plan, container, false); sharedpreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); addDateText = (EditText) rootView.findViewById(R.id.addDateText) ; startTime = (EditText) rootView.findViewById(R.id.startTime); endTime = (EditText) rootView.findViewById(R.id.endTime); plan_detials_text = (EditText) rootView.findViewById(R.id.plan_detials_text); savePlanBtn = (Button) rootView.findViewById(R.id.savePlanBtn); cancelBtn = (Button) rootView.findViewById(R.id.cancelBtn); addDateText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = new SelectDateFragment(); newFragment.show(getFragmentManager(), "DatePicker"); } }); startTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = new TimePickerFragment_start(); newFragment.show(getFragmentManager(), "DatePicker"); } }); endTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DialogFragment newFragment = new TimePickerFragment_end(); newFragment.show(getFragmentManager(), "DatePicker"); } }); cancelBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { getActivity().onBackPressed(); } }); savePlanBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString("plan_detials", plan_detials_text.getText().toString()); editor.putString("Date", addDateText.getText().toString()); editor.putString("startTime", startTime.getText().toString()); editor.putString("endTime",endTime.getText().toString()); editor.commit(); Intent go = new Intent(getActivity(),CreateContractActivity.class); // you pass the position you want the viewpager to show in the extra, // please don't forget to define and initialize the position variable // properly go.putExtra("viewpager_position", 6); startActivity(go); // getActivity().onBackPressed(); } }); return rootView; } public static class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final Calendar calendar = Calendar.getInstance(); int yy = calendar.get(Calendar.YEAR); int mm = calendar.get(Calendar.MONTH); int dd = calendar.get(Calendar.DAY_OF_MONTH); return new DatePickerDialog(getActivity(), this, yy, mm, dd); } public void onDateSet(DatePicker view, int yy, int mm, int dd) { populateSetDate(yy, mm+1, dd); } public void populateSetDate(int year, int month, int day) { addDateText.setText(month+"/"+day+"/"+year); } } public static class TimePickerFragment_start extends DialogFragment implements TimePickerDialog.OnTimeSetListener{ @Override public Dialog onCreateDialog(Bundle savedInstanceState){ // Get a Calendar instance final Calendar calendar = Calendar.getInstance(); // Get the current hour and minute int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); TimePickerDialog tpd = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar,this,hour,minute,false); // Return the TimePickerDialog return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute){ // Do something with the returned time startTime.setText(hourOfDay + ":" + minute); } } public static class TimePickerFragment_end extends DialogFragment implements TimePickerDialog.OnTimeSetListener{ @Override public Dialog onCreateDialog(Bundle savedInstanceState){ // Get a Calendar instance final Calendar calendar = Calendar.getInstance(); // Get the current hour and minute int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); TimePickerDialog tpd = new TimePickerDialog(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar,this,hour,minute,false); // Return the TimePickerDialog return tpd; } public void onTimeSet(TimePicker view, int hourOfDay, int minute){ // Do something with the returned time endTime.setText(hourOfDay + ":" + minute); } } }

and I want a way to back to the same fragment after save data , any help please

最满意答案

要将数据保存到SavePlanBtn.setOnClickListener使用以下代码:

Bundle args = new Bundle(); args.putString("first","Here is your first String"); args.putString("second" , "Here is your second String"); Fragment newFragment = new yourFragment(); newFragment.setArguments(args); getFragmentManager().popBackStack(); // this to back to the first fragment

然后要在onCreateView方法中接收片段中的数据,请使用以下命令:

if (getArguments() != null) { String one = getArguments().getString("first"); String two = getArguments().getString("second"); }

不要忘了编辑这段代码 : transaction.addToBackStack(null); 至:

transaction.addToBackStack("string");

这是回到第一个片段。

To Save data in your fragment in SavePlanBtn.setOnClickListener use this code:

Bundle args = new Bundle(); args.putString("first","Here is your first String"); args.putString("second" , "Here is your second String"); Fragment newFragment = new yourFragment(); newFragment.setArguments(args); getFragmentManager().popBackStack(); // this to back to the first fragment

Then to receive the data in your fragment in onCreateView method use this:

if (getArguments() != null) { String one = getArguments().getString("first"); String two = getArguments().getString("second"); }

And don't forget to edit this code: transaction.addToBackStack(null); To:

transaction.addToBackStack("string");

It is to back to the first fragment.

更多推荐

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

发布评论

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

>www.elefans.com

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