2013-08-01 3 views
0

Je crée une application android où je montre une liste d'articles et l'utilisateur peut choisir parmi eux. J'essaye de mettre à jour la liste si des articles mais l'application plantage tout le temps, n'importe quel code j'écris. Ce qui suit est ce que je faisComment faire pour mettre à jour un adaptateur de liste

dans la méthode OnCreate j'ai le code ci-dessous

adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
setListAdapter(adapter); 

au moment, showArray est un tableau vide et les maintenant les travaux de applciation.

Ensuite, j'insère des données dans showArray et j'essaye de mettre à jour l'adaptateur de liste dans une autre méthode. J'utilise le code ci-dessous:

adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
setListAdapter(adapter); 

mais l'application se bloque. J'ai essayé de changer mon code à:

adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
adapter.notifyDataSetChanged(); 

mais encore une fois pas de chance.

Mon code complet est ci-dessous:

public class Fragment_AllCommunities extends Fragment { 
    OnHeadlineSelectedListener callBack; 

    // The container Activity must implement this interface so the frag can deliver messages 
    public interface OnHeadlineSelectedListener { 
     public void onCommunitySelected(int position); 
    } 

    private ProgressDialog progress; 
    private Activity activity; 
    private JSONArray communities; 
    private JSONObject[] commDetails; 
    private String[] showArray = {""}; 
    private int layout = 0; 
    private ArrayAdapter<String> adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // We need to use a different list item layout for devices older than Honeycomb 
     layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1; 

     adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
     setListAdapter(adapter); 
    } 

    public void updateAllCommunities(JSONObject[] commArr) throws JSONException { 
     commDetails = commArr; 

     showArray = new String[commDetails.length]; 

     for(int i=0;i<commDetails.length;i++) 
     { 
      showArray[i] = commDetails[i].getString("name").toString(); 
     } 

     //adapter = new ArrayAdapter<String>(getActivity(), layout, showArray); 
     //adapter.notifyDataSetChanged(); 

     try 
     { 
      adapter.notifyDataSetChanged(); 
     } 
     catch(Exception ex) 
     { 
      String s = ex.getMessage(); 
     } 

    } 


    @Override 
    public void onStart() { 
     super.onStart(); 
     if (getFragmentManager().findFragmentById(R.id.view_community_fragment) != null) { 
      getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
      //getListView().setItemChecked(0, true); 
     } 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      callBack = (OnHeadlineSelectedListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
       + " must implement OnHeadlineSelectedListener"); 
     } 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     callBack.onCommunitySelected(position); 

     getListView().setItemChecked(position, true); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     String a = "S"; 
    } 
} 

quelqu'un peut me dire ce que je fais mal pls?

merci à l'avance apprécient toutes les réponses

clive

+0

Nous avons besoin de la pile de données de LogCat. –

+0

ajoute une pile en question. –

+0

pouvez-vous me dire comment le faire? Je suis un débutant dans android. sry et merci –

Répondre

0

Si vous souhaitez mettre à jour votre liste il suffit de mettre cette code.It mettra à jour l'adaptateur de vos données mises à jour listview.

adapter.notifyDataSetChanged(); 
+0

une exception de pointeur nul se produit et je ne sais pas –

+0

Vérifiez que l'adaptateur wheather est initialisé et que les données sont définies avant d'appeler adapter.notifyDataSetChanged(); –

1

Je suis assez sûr que le problème est que vous appelez setListAdapter plus d'une fois. Vous ne devriez appeler cela que lorsque vous construisez le ListFragment. Si vous souhaitez modifier votre liste, vous devez ajouter les données à la structure de données sous-jacente en appelant les méthodes add() et remove() de l'adaptateur.

i.e. .:

adapter.add(object); 
adapter.notifyDataSetChanged() 

Habituellement je créer une méthode d'emballage pour ajouter des données à l'adaptateur.

+0

null pointeur exception tout le temps. Je ne sais pas pourquoi cela se passe. Je peux essayer de changer toute la classe, peut-être que je le fais fonctionner –

+0

@CliveCauchi À quoi sert le NPE? Pouvez-vous me donner des informations à ce sujet? –

+0

@CliveCauchi J'ai juste pensé à une chose de plus. Essayez de déplacer votre code de 'onCreate' à' onActivityCreated' comme indiqué dans ce tutoriel: http://www.vogella.com/articles/AndroidListView/#listfragments Le problème pour le NPE peut être qu'il renvoie null car l'activité n'est pas créé encore. –

Questions connexes