2011-03-31 8 views
2
public class controller extends Activity { 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Context currentContext = this; 
    final BlinkAPI blinkAPI = new BlinkAPI(currentContext); 


    lvRadio = (ListView)findViewById(R.id.ListViewRadio); 
    } 
    ... 
    } 
    //*********************************** 
    //Separate file 

    public class BlinkAPI { 

private static Context mContext; 
static ListView radioLV; 


public BlinkAPI(Context ctx) 
{ 
    BlinkAPI.mContext = ctx; 

    radioLV = (ListView)((Activity) mContext).findViewById(R.id.ListViewRadio); 

} 

private static void updateRadioTitles() { 
     radioTitleAdapter = (ArrayAdapter<String>) radioLV.getAdapter(); 
     ...//Get titleStr etc 
     radioTitleAdapter.add(titleStr);   
     radioTitleAdapter.notifyDataSetChanged(); 
} 

Ce code se bloque suracessing ArrayAdapter dans onCreate d'une autre classe

Répondre

0

Si vous avez accès à ListView vous pouvez utiliser radioLV.getAdapter()

0

Vous pouvez obtenir un adaptateur en invoquant radioLV.getAdapter()

Mais vous ne pouvez pas le modifier (ajouter \ supprimer des éléments). Pour le modifier, créez et définissez un nouvel adaptateur, ou écrivez une extension de ArrayAdapter et ajoutez-y une méthode setObjects.

+0

Lorsque je tente d'ajouter l'adaptateur à la ListView lvRadio les accidents de prog à ce moment-là –

+0

peut être vous le faites pas thread d'interface utilisateur? Essayez radioLV.post (nouveau Runnable (public void run() {radioLV.setAdapter (..); radioTitleAdapter.add (titleStr);}});) – Flavio

1

Tout d'abord: raukodraug et Flavio ont raison! Vous ne pouvez pas appeler:

myAdapter = radioLV.getAdapter(); 

pour obtenir l'adaptateur de ListView.

Cependant, vous avez dit que vous aimeriez mettre à jour l'adaptateur. Si vous voulez faire cela, votre activité doit tenir cette carte comme une variable, comme ceci:

private Adapter myAdapter; 

Si vous voulez maintenant mettre à jour l'adaptateur, vous pouvez appeler la méthode suivante (assurez-vous que vous faites ces appels sur l'interface utilisateur-fil, sinon le listview ne sera pas en mise à jour):

myAdapter.add(newItem); // whatever item you might want to add 
myAdapter.notifyDataSetChanged(); 
+0

contexte pour myAdapter contructor? cela ne fonctionnera pas \t ArrayAdapter radioTitleAdapter = new ArrayAdapter (null, android.R.layout.simple_expandable_list_item_1, radioTitleArrayList); –

+0

Je ne comprends pas! Peut-être que vous voulez afficher le code entier. –

Questions connexes