2010-10-01 7 views
0

Je suis nouveau sur android. Récemment j'ai appris comment créer un Tabwidget. Cette fonction est utile. Mais je trouve que je ne peux pas ajouter les widgets que je veux dans R.layout.xxxx. Donc j'essaye de le faire par code java. Mais malheureusement, il a échoué. En utilisant XML, je fais ce qui suit:Ajout de spinner via le code java plutôt que XML dans Tabwidget

Le programme fonctionne sans problème.

public class ShowBalanceActivity extends Activity implements AdapterView.OnItemSelectedListener 
{ 
    private Spinner monthview; 
    private ArrayAdapter monthadapter; 

public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.balance); 

     monthadapter = ArrayAdapter.createFromResource(
       this, R.array.months, android.R.layout.simple_spinner_item); 
     monthadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
     monthview = (Spinner) findViewById(R.id.monthlist); 

monthview.setOnItemSelectedListener(this); 
monthview.setAdapter(monthadapter); 

    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
    { 

    } 

} 

Pour la partie de code Java, j'utilise ce qui suit,

public class BalanceLayout extends TabActivity implements TabHost.TabContentFactory 
{ 

    private Activity activity; 
    private LayoutInflater inflaterHelper = null; 
    private Spinner monthview = null; 
    private LinearLayout layout; 
    private static final String Tab1 = "By Date"; 
    private static final String Tab2 = "By Categories"; 
    private ArrayAdapter <String> monthadapter = null; 

    public BalanceLayout (Activity a) 
    { 
      activity = a; 
      inflaterHelper = a.getLayoutInflater(); 
    } 

public View addCustomView(String id) 
    { 

     layout = new LinearLayout(activity); 
     layout.setOrientation(LinearLayout.VERTICAL); 

     if(id.equals(Tab1)) 
     { 

      Spinner monthview = new Spinner(activity); 
     ArrayAdapter <String> monthadapter = new ArrayAdapter <String> (this, 
        android.R.layout.simple_dropdown_item_1line, MONTHS); 
      monthadapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); 
      monthview.setAdapter(monthadapter); 

      monthview.setOnItemSelectedListener(
        new AdapterView.OnItemSelectedListener() 
        { 
         public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
         { 

         } 

         public void onNothingSelected(AdapterView<?> parentView) 
        { 

        } 


        }); 
      layout.addView(monthview, 
        new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); 

     } 

     else if(id.equals(Tab2)) 
     { 

     } 

     return layout; 
    } 

} 

Mais il cause près de la force quand j'exécute le programme. Il semble que je ne peux pas utiliser la méthode findViewById pour créer la vue comme XML. J'ai lu beaucoup de documentations et de recherche android docs et internet. Je ne peux pas trouver la solution. J'espère que certains d'entre vous savent ce qui est arrivé à mon code et la solution à résoudre

Merci!

Tom

Répondre

0

Après avoir vérifié mon code et débogué. Enfin, il est facile à résoudre. Mais à l'origine, je ne sais pas pourquoi. Ensuite, j'isole le problème en insérant seulement textview.

TextView tv = nouveau TextView (activité); Tv.setText ("Ceci est une vue de texte")

layout.addView (tv, nouvelles LinearLayout.LayoutParams (LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

Le problème pour mon code est d'utiliser "this" et non "activity". C'est parce que je veux créer une mise en page de façon dynamique en n'utilisant pas la fabrique de contenu ou la méthode d'intention. Donc "ceci" a été remplacé par l'activité. Ensuite, le problème est résolu. Mais j'ai passé beaucoup de temps à dépanner. Android est incroyable

monthadapter = ArrayAdapter.createFromResource ( activité, R.array.months, android.R.layout.simple_spinner_item); monthadapter.setDropDownViewResource (android.R.layout.simple_dropdown_item_1line);

Questions connexes