IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Pb de m à j ListFragment depuis DialogFragment


Sujet :

Android

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Pb de m à j ListFragment depuis DialogFragment
    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

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Finalement j'ai trouvé la solution
    J'ai fait cette modification dans le code de MainActivity.java
    maintenant ça fonctionne correctement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @Override
    	public void malisteDialogItemAdded(Maliste newItem) {
    		MalisteFragment mMalisteFragment = (MalisteFragment)getFragmentManager().findFragmentByTag("1");
    		MalisteRepository mMalisteRepository = new MalisteRepository(getApplicationContext());
    		mMalisteRepository.Open();
    		List<Maliste> mItems = mMalisteRepository.GetAll();
    		mMalisteRepository.Close();
    		mItems.add(newItem);
    		MalisteAdapter mMalisteAdapter = new MalisteAdapter(getApplicationContext(), mItems);
    		mMalisteFragment.setListAdapter(mMalisteAdapter);
    		mMalisteFragment.getAdapter().notifyDataSetChanged();
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CR][VB6] Impression d'un état depuis VB
    Par sda dans le forum SDK
    Réponses: 3
    Dernier message: 06/02/2007, 17h27
  2. Fermer l'animation (swf/exe lancé depuis Windows)
    Par ZiZouJH dans le forum Flash
    Réponses: 3
    Dernier message: 14/01/2003, 10h00
  3. [VB6] Savoir depuis VB, si un document Excel est ouvert
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h16
  4. Réponses: 1
    Dernier message: 22/08/2002, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo