Bonjour à tous,
Je suis débutant en développement Android, je vous sollicite car j'écris une application simple (liste de courses), pour faire un peu le tour des possibilités sur android.
Je bloque, je voudrais bien que le ListFragment qui affiche mes courses, se mette à jour après la saisie dans le dialogFragment.
Les saisies se stockent bien en Base de données mais le rafraîchissement de la liste ne se fait pas.
J'ai lu pas mal de doc et d'exemples sur le net mais sans résultat.
Voici le code de MainActivity.java
celui de MalisteFragment.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140 package fr.jldm.androliste; import java.util.ArrayList; import java.util.List; import fr.jldm.androliste.apropos.AproposFragment; import fr.jldm.androliste.historique.HistoriqueFragment; import fr.jldm.androliste.maliste.Maliste; import fr.jldm.androliste.maliste.MalisteAdapter; import fr.jldm.androliste.maliste.MalisteFragment; import fr.jldm.androliste.maliste.MalisteDialogFragment; import fr.jldm.androliste.maliste.MalisteRepository; import fr.jldm.androliste.panier.PanierFragment; import fr.jldm.androliste.parametres.ParametresFragment; import android.app.ActionBar; import android.app.Activity; import android.app.Fragment; import android.app.FragmentManager; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.Toast; public class MainActivity extends Activity implements NavigationDrawerFragment.NavigationDrawerCallbacks, MalisteDialogFragment.MalisteDialogItemAddedListener { private NavigationDrawerFragment mNavigationDrawerFragment; private CharSequence mTitle; private ArrayAdapter<String> mArrayAdapterHistorique; private ArrayList<String> mItemHistorique; private ArrayAdapter<String> mArrayAdapterPanier; private ArrayList<String> mItemPanier; private List<Maliste> mItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.navigation_drawer); mTitle = getTitle(); mNavigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout)); } @Override public void onNavigationDrawerItemSelected(int position) { FragmentManager mFragmentManager = getFragmentManager(); switch (position) { case 0: mFragmentManager.beginTransaction() .replace(R.id.container, PanierFragment.newInstance(position+1), Integer.toString(position)) .commit(); break; case 1: mFragmentManager.beginTransaction() .replace(R.id.container, MalisteFragment.newInstance(position+1), Integer.toString(position)) .commit(); break; case 2: mFragmentManager.beginTransaction() .replace(R.id.container, HistoriqueFragment.newInstance(position+1), Integer.toString(position)) .commit(); break; default: break; } } public void onSectionAttached(int number) { switch (number) { case 1: mTitle = getString(R.string.title_section1); break; case 2: mTitle = getString(R.string.title_section2); break; case 3: mTitle = getString(R.string.title_section3); break; case R.id.menu_global_about: mTitle = getString(R.string.action_about); break; case R.id.menu_global_settings: mTitle = getString(R.string.action_settings); break; case R.id.maliste_menu_add: mTitle = getString(R.string.title_maliste_form); } } public void restoreActionBar() { ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setDisplayShowTitleEnabled(true); actionBar.setTitle(R.string.app_name); actionBar.setSubtitle(mTitle); } @Override public boolean onCreateOptionsMenu(Menu menu) { if (!mNavigationDrawerFragment.isDrawerOpen()) { restoreActionBar(); return true; } return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { FragmentManager mFragmentManager = getFragmentManager(); int itemId = item.getItemId(); switch (itemId) { case R.id.menu_global_settings: mFragmentManager.beginTransaction() .replace(R.id.container, ParametresFragment.newInstance(R.id.menu_global_settings)) .commit(); return true; case R.id.menu_global_about: mFragmentManager.beginTransaction() .replace(R.id.container, AproposFragment.newInstance(R.id.menu_global_about)) .commit(); return true; default: return super.onOptionsItemSelected(item); } } @Override public void malisteDialogItemAdded(Maliste newItem) { MalisteFragment mMalisteFragment = (MalisteFragment)getFragmentManager().findFragmentByTag("1"); mItems.add(newItem); mMalisteFragment.getAdapter().notifyDataSetChanged(); mMalisteFragment.refresh(); } }
celui de DialogFragment.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 package fr.jldm.androliste.maliste; import android.app.Activity; import android.app.DialogFragment; import android.app.Fragment; import android.app.FragmentTransaction; import android.app.ListFragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import fr.jldm.androliste.MainActivity; import fr.jldm.androliste.R; public class MalisteFragment extends ListFragment { private static final String ARG_SECTION_NUMBER = "section_number"; private MalisteAdapter mMalisteAdapter; private MalisteRepository mMalisteRepository; public static MalisteFragment newInstance(int sectionNumber){ MalisteFragment fragment = new MalisteFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; } public MalisteFragment(){} @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mMalisteRepository = new MalisteRepository(getActivity()); mMalisteRepository.Open(); mMalisteAdapter = new MalisteAdapter(getActivity(), mMalisteRepository.GetAll()); mMalisteRepository.Close(); setListAdapter(mMalisteAdapter); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View mView = inflater.inflate(R.layout.fragment_maliste, container, false); return mView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); setHasOptionsMenu(true); } @Override public void onResume() { super.onResume(); mMalisteAdapter.notifyDataSetChanged(); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.maliste, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { int mIdItem = item.getItemId(); switch (mIdItem) { case R.id.maliste_menu_synchro: return true; case R.id.maliste_menu_add: showFormulaire(); return true; default: return super.onOptionsItemSelected(item); } } private void showFormulaire(){ FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction(); Fragment mFragment = getFragmentManager().findFragmentByTag(getResources().getString(R.string.tag_maliste_dialog)); if(mFragment != null){ mFragmentTransaction.remove(mFragment); } mFragmentTransaction.addToBackStack(null); DialogFragment mMalisteForm = null; mMalisteForm = MalisteDialogFragment.newInstance(R.string.tag_maliste_dialog, getResources().getString(R.string.title_maliste_form)); int tag = R.string.tag_maliste_dialog; mMalisteForm.show(getFragmentManager(), Integer.toString(tag)); } public void refresh(){ mMalisteRepository.Open(); mMalisteAdapter = new MalisteAdapter(getActivity(), mMalisteRepository.GetAll()); mMalisteRepository.Close(); mMalisteAdapter.notifyDataSetChanged(); setListAdapter(mMalisteAdapter); } public MalisteAdapter getAdapter(){ return mMalisteAdapter; } @Override public void onAttach(Activity activity) { super.onAttach(activity); ((MainActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER)); } }
J'ai bien capter que tout doit passer par MainActivity pour que les fragments discutent entre eux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136 package fr.jldm.androliste.maliste; import java.text.SimpleDateFormat; import java.util.Calendar; import fr.jldm.androliste.MainActivity; import fr.jldm.androliste.R; import fr.jldm.androliste.parametres.ParametresFragment; import android.app.Activity; import android.app.DialogFragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; public class MalisteDialogFragment extends DialogFragment { private EditText mEditTextCode; private EditText mEditTextQuantite; private EditText mEditTextPrix; private EditText mEditTextLibelle; private EditText mEditTextDescription; private String mAujourdhui; //private static final String TAG_ACTION_ADD = "add"; //private static final String TAG_ACTION_UPDATE = "update"; private MalisteRepository mMalisteRepository; private Maliste mMaliste; private static final String ARG_SECTION_NUMBER = "section_number"; private static final String ARG_TITRE = "titre"; private MalisteDialogItemAddedListener mMalisteDialogItemAddedListener; public static MalisteDialogFragment newInstance(int sectionNumber, String titre){ MalisteDialogFragment fragment = new MalisteDialogFragment(); Bundle args = new Bundle(); if(titre != null) args.putString(ARG_TITRE, titre); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; } public MalisteDialogFragment(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mView = inflater.inflate(R.layout.fragment_maliste_form, container, false); String titre = getArguments().getString(ARG_TITRE); getDialog().setTitle(titre); return mView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Calendar c = Calendar.getInstance(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); mAujourdhui = df.format(c.getTime()); mMalisteRepository = new MalisteRepository(getActivity().getApplicationContext()); mEditTextCode = (EditText)view.findViewById(R.id.form_maliste_code); mEditTextQuantite = (EditText)view.findViewById(R.id.form_maliste_quantite); mEditTextPrix = (EditText)view.findViewById(R.id.form_maliste_prix); mEditTextLibelle = (EditText)view.findViewById(R.id.form_maliste_libelle); mEditTextDescription = (EditText)view.findViewById(R.id.form_maliste_description); Button mButtonValidate; mButtonValidate = (Button)view.findViewById(R.id.form_maliste_btn_validate); mButtonValidate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { float mQuantite = 1; float mPrix = 0; int mId = ParametresFragment.mPrefId; //int mParent = ParametresFragment.mPrefParent; if(mEditTextQuantite.getText().toString().length()>0){ mQuantite = Float.parseFloat(mEditTextQuantite.getText().toString()); } if(mEditTextPrix.getText().toString().length()>0){ mPrix = Float.parseFloat(mEditTextPrix.getText().toString()); } String mCode = null; String mLibelle = null; String mDescription = null; if(mEditTextCode.getText().toString() != null) mCode = mEditTextCode.getText().toString(); if(mEditTextLibelle.getText().toString() != null) mLibelle = mEditTextLibelle.getText().toString(); if(mEditTextDescription.getText().toString() != null) mDescription = mEditTextDescription.getText().toString(); if(mCode.length()>0 && mLibelle.length()>0){ mMaliste = new Maliste(mCode, mQuantite, mLibelle, mDescription, mPrix, mAujourdhui, 1, mId); ajouterMaliste(); mMalisteDialogItemAddedListener.malisteDialogItemAdded(mMaliste); } dismiss(); } }); Button mButtonCancel; mButtonCancel = (Button)view.findViewById(R.id.form_maliste_btn_cancel); mButtonCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); } private void ajouterMaliste(){ new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(500); mMalisteRepository.Open(); mMalisteRepository.Save(mMaliste); mMalisteRepository.Close(); }catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } public interface MalisteDialogItemAddedListener{ public void malisteDialogItemAdded(Maliste newItem); } @Override public void onAttach(Activity activity) { super.onAttach(activity); ((MainActivity) activity).onSectionAttached(getArguments().getInt(ARG_SECTION_NUMBER)); try { mMalisteDialogItemAddedListener = (MalisteDialogItemAddedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString()+" doit implémenter MalisteDialogItemAddedListener"); } } }
Est ce que quelqu'un pourrai m'indiquer la marche à suivre pour que ça fonctionne?
Merci
Partager