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

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 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
 
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));
	}
}
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
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");
		}
	}
}
J'ai bien capter que tout doit passer par MainActivity pour que les fragments discutent entre eux.

Est ce que quelqu'un pourrai m'indiquer la marche à suivre pour que ça fonctionne?

Merci