2017-07-26 3 views
0

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); 

    } 
} 
} 
+1

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). –

+0

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

Répondre

0

Objets à la liste dans le R ecycleview est créé chaque fois que ce fragment spécifique est chargé. Ainsi, chaque fois que vous tuez l'application ou que vous passez à votre troisième fragment, le premier fragment est rechargé et l'objet est créé à nouveau contenant uniquement les valeurs par défaut que vous avez mises. L'ajout à la liste n'est valide que jusqu'à ce que cet objet reste en mémoire, sinon il est détruit. En fonction de vos besoins, vous pouvez opter pour n'importe quel support de stockage tel que Préférences partagées (Utilisation de la sérialisation) ou même sqlite (mais pas très nécessaire pour les petites tâches).

1

Une façon simple d'ajouter un élément au sommet de la vue recycleur est la suivante:

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: 
     int position = 0 

       newitem = new Item(5, team1_add.getText().toString(), "0", "0","0" , "0" , R.mipmap.ic_blasonvierge, R.mipmap.ic_blasonvierge); 
       items.add(position,"" + newitem) 
adapter.notifyItemInserted(position); 
       // 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(); 
} 

}