Je suis nouveau dans le développement Android, donc je n'ai pas encore tous les éléments de base.
Je suis coincé avec mon problème depuis quelques jours.
Mon problème est le suivant:
J'ai reçu une vue de recyclage avec quelques éléments à l'intérieur. J'ai créé un bouton pour ajouter un nouvel élément dans la liste. Ajout de la fonction fonctionne bien, je peux voir un nouvel élément, mais si je glisse vers le troisième fragment (j'ai 3 fragments dans mon application, et recyclerView est sur la gauche) ou si je tue simplement mon application et le relancer, chaque nouvelle les objets sont détruits.
Donc, fondamentalement, je ne sais pas comment vraiment enregistrer ce genre de chose dans l'application Android. J'ai besoin de ton aide pour me montrer le chemin.
Voici mon code:Comment enregistrer les modifications dans RecyclerView
Fragment avec recyclerview
public class CameraFragment extends Fragment {
//matchselector reclycler view
private ArrayList<Item> items = new ArrayList<>();
private RecyclerView recyclerView;
private SnapRecyclerAdapter adapter;
// add
private View addMatch;
private AlertDialog.Builder alertDialog;
private EditText team1_add;
private View view;
private boolean add = false;
private int edit_position;
private Item newitem;
public static CameraFragment create() {
return new CameraFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_camera, container, false);
initDialog();
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
//match selector vertical recycler view
recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
addMatch = (View) view.findViewById(R.id.add_match);
/**
* Center snapping
*/
SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
final CustomLinearLayoutManager mCustomLinearLayoutManager = new CustomLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(mCustomLinearLayoutManager);
recyclerView.setHasFixedSize(true);
adapter = new SnapRecyclerAdapter(getContext(), items);
recyclerView.setAdapter(adapter);
MatchList();
adapter.notifyDataSetChanged();
//Button addmatch click
addMatch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.add_match:
removeView();
add = true;
alertDialog.setTitle("Ajout");
team1_add.setText("");
alertDialog.show();
break;
}
}
});
}
// dialog ajout
private void initDialog(){
alertDialog = new AlertDialog.Builder(getContext());
view = getActivity().getLayoutInflater().inflate(R.layout.dialog_layout_addmatch,null);
alertDialog.setView(view);
alertDialog.setPositiveButton("Ajouter", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(add){
add =false;
newitem = new Item(5, team1_add.getText().toString(), "0", "0","0" , "0" , R.mipmap.ic_blasonvierge, R.mipmap.ic_blasonvierge);
adapter.addItem(newitem);
dialog.dismiss();
} else {
items.set(edit_position, newitem);
adapter.notifyDataSetChanged();
dialog.dismiss();
}
}
});
team1_add = (EditText)view.findViewById(R.id.team1_add);
}
private void removeView(){
if(view.getParent()!=null) {
((ViewGroup) view.getParent()).removeView(view);
}
}
public void MatchList() {
items.add(new Item(1, "a", "b", "c","d" , "12:30" , R.mipmap.ic_blasonvierge, R.mipmap.ic_blasonvierge));
items.add(new Item(4, "a", "b", "c","d" , "12:30" , R.mipmap.ic_blasonvierge, R.mipmap.ic_blasonvierge));
items.add(new Item(2, "a", "b", "c", "d" , "12:30" , R.mipmap.ic_blasonvierge, R.mipmap.ic_blasonvierge));
items.add(new Item(3, "a", "b", "c","d" , "12:30" , R.mipmap.ic_blasonvierge, R.mipmap.ic_blasonvierge));
adapter.notifyDataSetChanged();
}
}
SnapRecyclerAdapter:
public class SnapRecyclerAdapter extends RecyclerView.Adapter<SnapRecyclerAdapter.RecyclerViewHolder> {
private LayoutInflater layoutInflater;
private Context context;
private ArrayList<Item> items;
public SnapRecyclerAdapter(Context context, ArrayList<Item> items) {
this.layoutInflater = LayoutInflater.from(context);
this.context = context;
this.items = items;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View item = layoutInflater.inflate(R.layout.item_recycler_view, parent, false);
return new RecyclerViewHolder(item);
}
@Override
public void onBindViewHolder(final RecyclerViewHolder holder, int position) {
Item item = items.get(position);
holder.Logoteam1.setImageResource(item.getLogoteam1());
holder.Logoteam2.setImageResource(item.getLogoteam2());
holder.team1.setText(item.getTeam1());
holder.team2.setText(item.getTeam2());
holder.categorie.setText(item.getCategorie());
holder.location.setText(item.getLocation());
holder.date.setText(item.getDate());
}
public void addItem(Item newitem) {
items.add(newitem);
notifyItemInserted(items.size());
notifyDataSetChanged();
}
public void removeItem(int position) {
items.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, items.size());
}
@Override
public int getItemCount() {
return items.size();
}
class RecyclerViewHolder extends RecyclerView.ViewHolder {
private ImageView Logoteam1;
private ImageView Logoteam2;
private TextView team1;
private TextView team2;
private TextView categorie;
private TextView location;
private TextView date;
private RecyclerViewHolder(final View v) {
super(v);
Logoteam1 = (ImageView) v.findViewById(R.id.Logoteam1);
Logoteam2 = (ImageView) v.findViewById(R.id.Logoteam2);
team1 = (TextView) v.findViewById(R.id.team1);
team2 = (TextView) v.findViewById(R.id.team2);
categorie = (TextView) v.findViewById(R.id.categorie);
location = (TextView) v.findViewById(R.id.location);
date = (TextView) v.findViewById(R.id.date);
}
}
}
Je ne suis pas, comment voulez-vous qu'ils soient sauvegardés après onDestroy ?. Comprenez-vous que ces objets sont sauvegardés dans la mémoire, non? Corrigez-moi si je me trompe, mais je ne vois aucun moyen persistant d'enregistrer les données (db, sharedprefs, storage, etc). –
Je pense que vous devez persister vos données en quelque sorte. Vous avez plusieurs options - préférences partagées, un fichier sur le système de fichiers et une base de données. Les expliquer serait une tâche assez longue, donc je vous recommande de lire le Guide de stockage de données - https://developer.android.com/guide/topics/data/data-storage.html – stan0