Android 正在尝试从RecyclerView(片段)的EditText保存数组中TextView行中的数据
我是Android的新手,在这里尝试解决两个问题 我有一个使用传统库(RecycleServiceEnhanced)的recyclerview片段,它提供了3个按钮(添加、编辑、删除) 第一个问题:Android 正在尝试从RecyclerView(片段)的EditText保存数组中TextView行中的数据,android,android-fragments,android-edittext,android-recyclerview,android-sharedpreferences,Android,Android Fragments,Android Edittext,Android Recyclerview,Android Sharedpreferences,我是Android的新手,在这里尝试解决两个问题 我有一个使用传统库(RecycleServiceEnhanced)的recyclerview片段,它提供了3个按钮(添加、编辑、删除) 第一个问题: public class RowModel { private String mainText, subText, id; public RowModel(String mainText, String subText) { this.mainText = mainText; th
public class RowModel {
private String mainText, subText, id;
public RowModel(String mainText, String subText) {
this.mainText = mainText;
this.subText = subText;
this.id = String.valueOf((new Date()).getTime());
}
private RowModel() {
}
public String getMainText() {
return mainText;
}
public void setMainText(String mainText) {
this.mainText = mainText;
}
public String getSubText() {
return subText;
}
public void setSubText(String subText) {
this.subText = subText;
}
@Override
public String toString() {
return mainText + ";" + subText;
}
public String getId() {
return id;
}
private void setId(String id) {
this.id = id;
}
public static RowModel newInstance(String id, String data) {
RowModel rowModel = new RowModel();
rowModel.setId(id);
String[] arr = data.split(";");
rowModel.setMainText(arr[0]);
rowModel.setSubText(arr[1]);
return rowModel;
}
}
我需要删除列表中的行(onclick delete),当我返回到这个片段时,这一行不应该再存在了。现在我了解了如何使用浮动按钮将其保存在SharedReferences中,但不能通过单击按钮del将其从列表中永久删除
第二个问题:
对于每一行,我都有一个带有edit_name和edit_description的alertdialog,我需要将每一行的数据传递并保存到每一行的textview(mainText和saveText)
我的代码:
片段
public class MainPersonTrainFragment_recycler_v_edit extends Fragment implements RecyclerTouchListener.RecyclerTouchListenerHelper, View.OnClickListener {
private AlertDialog.Builder alertDialog;
private EditText et_personal_trainings_name;
RecyclerView mRecyclerView;
private TextView name_personal_training;
private TextView descript_personal_training;
MainAdapter mAdapter;
String[] dialogItems;
List<Integer> unclickableRows, unswipeableRows;
private EditText et_personal_trainings_description;
private boolean add = false;
private int edit_position;
private int openOptionsPosition;
private OnActivityTouchListener touchListener;
private RecyclerTouchListener onTouchListener;
private Paint p = new Paint();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
SharedPreferences trainings = PreferenceManager.getDefaultSharedPreferences(getActivity());
View view = inflater.inflate(R.layout.workout_personal_trainings, container, false);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
mRecyclerView.addOnItemTouchListener(onTouchListener);
super.onActivityCreated(savedInstanceState);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
FloatingActionButton fab = (FloatingActionButton) getActivity().findViewById(R.id.fab_personal_trainings);
fab.setOnClickListener(this);
name_personal_training = (TextView) getActivity().findViewById(R.id.mainText);
descript_personal_training = (TextView) getActivity().findViewById(R.id.subText);
mRecyclerView = (RecyclerView) getActivity().findViewById(R.id.card_recycler_view);
mAdapter = new MainAdapter(getActivity(), getData());
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
onTouchListener = new RecyclerTouchListener(getActivity(), mRecyclerView);
onTouchListener
.setIndependentViews(R.id.rowButton)
.setViewsToFade(R.id.rowButton)
.setClickable(new RecyclerTouchListener.OnRowClickListener() {
@Override
public void onRowClicked(int position) {
ToastUtil.makeToast(getActivity().getApplicationContext(), "Row " + (position + 1) + " clicked!");
}
@Override
public void onIndependentViewClicked(int independentViewID, int position) {
ToastUtil.makeToast(getActivity().getApplicationContext(), "Button in row " + (position + 1) + " clicked!");
FragmentManager fragmentManager = getFragmentManager();
Fragment fragment = getFragmentManager().findFragmentById(R.id.container_main);
RowModel rowModel = mAdapter.modelList.get(position);
fragment = PersonalTrainigCardFragment.newInstance(rowModel.getMainText());
fragmentManager.beginTransaction().replace(R.id.container_main, fragment).addToBackStack("REPLACE_TO_PROFILE").commit();
}
})
.setLongClickable(true, new RecyclerTouchListener.OnRowLongClickListener() {
@Override
public void onRowLongClicked(int position) {
ToastUtil.makeToast(getActivity().getApplicationContext(), "Row " + (position + 1) + " long clicked!");
}
})
.setSwipeOptionViews(R.id.add, R.id.edit, R.id.change)
.setSwipeable(R.id.rowFG, R.id.rowBG, new RecyclerTouchListener.OnSwipeOptionsClickListener() {
@Override
public void onSwipeOptionClicked(int viewID, int position) {
String message = "";
if (viewID == R.id.add) {
message += "Add Exercises";
} else if (viewID == R.id.edit) {
message += "Edit Name and Description";
alertDialog();
} else if (viewID == R.id.change) {
message += "Delete Training";
SharedPreferences sPref = getActivity().getSharedPreferences("TRAINING", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sPref.edit();
editor.remove("TRAINING");
editor.commit();
removeItem(position);
}
message += " clicked for row " + (position + 1);
ToastUtil.makeToast(getActivity().getApplicationContext(), message);
}
});
super.onViewCreated(view, savedInstanceState);
}
private List<RowModel> getData() {
List<RowModel> list = new ArrayList<>(1);
// for (int i = 0; i < 1; i++) {
// list.add(new RowModel("My personal training " + (i + 1), "Description... "));
// }
SharedPreferences sPref = getActivity().getSharedPreferences("TRAINING", Context.MODE_PRIVATE);
Map<String, ?> allTraining = sPref.getAll();
for (Map.Entry entry : allTraining.entrySet()) {
RowModel rowModel = RowModel.newInstance(String.valueOf(entry.getKey()), String.valueOf(entry.getValue()));
list.add(rowModel);
}
return list;
}
@Override
public void setOnActivityTouchListener(OnActivityTouchListener listener) {
this.touchListener = listener;
}
private class MainAdapter extends RecyclerView.Adapter<MainAdapter.MainViewHolder> {
LayoutInflater inflater;
List<RowModel> modelList;
public MainAdapter(Context context, List<RowModel> list) {
inflater = LayoutInflater.from(context);
modelList = new ArrayList<>(list);
}
@Override
public MainViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.row_personal_training, parent, false);
return new MainViewHolder(view);
}
@Override
public void onBindViewHolder(MainViewHolder holder, int position) {
holder.bindData(modelList.get(position));
}
@Override
public int getItemCount() {
return modelList.size();
}
public void addDescript(RowModel subText) {
modelList.add(subText);
notifyItemInserted(modelList.size());
}
class MainViewHolder extends RecyclerView.ViewHolder {
TextView mainText, subText;
public MainViewHolder(View itemView) {
super(itemView);
mainText = (TextView) itemView.findViewById(R.id.mainText);
subText = (TextView) itemView.findViewById(R.id.subText);
}
public void bindData(RowModel rowModel) {
mainText.setText(rowModel.getMainText());
subText.setText(rowModel.getSubText());
}
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fab_personal_trainings:
for (int i = 0; i < 1; i++) {
RowModel rowModel = new RowModel("My personal training " + (mAdapter.modelList.size() + 1), "Description... ");
mAdapter.modelList.add(rowModel);
mAdapter.notifyDataSetChanged();
SharedPreferences sPref = getActivity().getSharedPreferences("TRAINING", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sPref.edit();
editor.putString(rowModel.getId(), rowModel.toString());
editor.commit();
}
case R.id.change:
}
}
public void removeItem(int position) {
mAdapter.modelList.remove(position);
mAdapter.notifyItemRemoved(position);
mAdapter.notifyItemRangeChanged(position, mAdapter.modelList.size());
RowModel rowModel = new RowModel("My personal training " + (mAdapter.modelList.size() + 1), "Description... ");
mAdapter.modelList.remove(rowModel);
mAdapter.notifyDataSetChanged();
}
private void alertDialog() {
alertDialog = new AlertDialog.Builder(this.getContext());
final View view = getActivity().getLayoutInflater().inflate(R.layout.alertdialog_personal_training_name_description, null);
et_personal_trainings_name = (EditText) view.findViewById(R.id.name_of_training_alert_d);
et_personal_trainings_description = (EditText) getView().findViewById(R.id.description_of_training_alert_d);
name_personal_training = (TextView) getView().findViewById(R.id.mainText);
descript_personal_training = (TextView) getView().findViewById(R.id.subText);
alertDialog.setMessage("Edit Training info");
alertDialog.setView(view);
//In case it gives you an error for setView(View) try
alertDialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String message = null;
if (et_personal_trainings_name.length() < 1) {
ToastUtil.makeToast(getActivity().getApplicationContext(), message);
return;
} else {
// name_personal_training.setText( et_personal_trainings_name.getText());
ToastUtil.makeToast(getView().getContext(), et_personal_trainings_name.getText().toString());
message += et_personal_trainings_name.getText().toString();
dialog.dismiss();
}
}
});
alertDialog.show();
}
期待任何帮助。谢谢