2017-03-22 1 views
0

j'ai un fileur dans lequel lorsqu'un utilisateur prend une valeur, la onItemSelectedListener ouvre une boîte de dialogue pour mettre des détails supplémentairesTrouvez d'autres vues de l'enfant de la mise en page dynamique créé

private AdapterView.OnItemSelectedListener spinnerListeners=new AdapterView.OnItemSelectedListener(){ 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     switch (parent.getId()){ 
      case R.id.puttSpinner: 
       // open dialog to enter Additional putt Stats 
       if(position > 0) { 
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(v.getContext()); 
        LinearLayout layout = new LinearLayout(v.getContext()); 
        LinearLayout.LayoutParams parms = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,  LinearLayout.LayoutParams.WRAP_CONTENT);layout.setOrientation(LinearLayout.VERTICAL);layout.setLayoutParams(parms); 
        layout.setGravity(Gravity.CLIP_VERTICAL); 
        layout.setPadding(2, 2, 2, 2); 
        for (int i=1;i<position+1;i++){ 
         LinearLayout ll = new LinearLayout(v.getContext()); 
         LinearLayout.LayoutParams llp = new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.MATCH_PARENT, 
           LinearLayout.LayoutParams.WRAP_CONTENT); 
         ll.setOrientation(LinearLayout.HORIZONTAL); 
         ll.setLayoutParams(llp); 
         TextView tv = new TextView(v.getContext()); 
         tv.setText("Putt "+String.valueOf(i)+":"); 
         tv.setPadding(40, 40, 40, 40); 
         tv.setGravity(Gravity.CENTER); 
         tv.setTextSize(20); 
         LinearLayout.LayoutParams tvParams = new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.MATCH_PARENT, 
           LinearLayout.LayoutParams.WRAP_CONTENT); 
         tvParams.bottomMargin = 5; 
         //ll.addView(tv,tvParams); 
         ll.addView(tv); 

         Spinner s = new Spinner(v.getContext()); 
         String[] puttDistList = getResources().getStringArray(R.array.putt_dist_list); 
         s.setAdapter(new ArrayAdapter<String>(v.getContext(),R.layout.putting_practice, puttDistList)); 
         s.setOnItemSelectedListener(puttDistSelectListener); 
         LinearLayout.LayoutParams sParams = new LinearLayout.LayoutParams(
           LinearLayout.LayoutParams.WRAP_CONTENT, 
           LinearLayout.LayoutParams.WRAP_CONTENT); 
         ll.addView(s,sParams); 

         layout.addView(ll); 
        } 
        alertDialog.setView(layout); 
        alertDialog.setTitle("Putting Stats - Distance to Pin"); 
        alertDialog.setNegativeButton("OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        }); 
        alertDialog.show(); 
       } 

       break; 
     } 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 
}; 

Maintenant, lorsqu'un utilisateur prend la valeur de Dialog Spinner s, il est auditeur met à jour la base de données avec l'entrée d'utilisateur, mais comment puis-je obtenir le textValue de TextView tv qui est associé à ce spinner

les deux TextView et Spinner sont contenus dans dynamiquement créé disposition linéaire « ll » qui est en mise en page parent "mise en page". Les deux sont créés dynamiquement

Merci à l'avance

final AdapterView.OnItemSelectedListener puttDistSelectListener = new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     //add the putt# and distance to temp_putt_stats table 
     DbAdapter adapter = new DbAdapter(view.getContext()); 
     String distValue = parent.getItemAtPosition(position).toString(); 
     switch (position){ 
      case 0: //Inches 
       break; 
      case 1: //<3ft 
       break; 
      case 2: //<6 ft 
       break; 
      case 3: //<10 ft 
       break; 
      case 4: //10-20 
       break; 
      case 5: //20-30 
       break; 
      case 6: //30-40 
       break; 
      case 7: //> 40 
       break; 
     } 
     Toast.makeText(view.getContext(), "Position :"+position+" ListItem : " +distValue ,Toast.LENGTH_SHORT).show(); 

    } 

Image of dialog that opens up

Répondre

0

Pour API 17 et ci-dessus, vous pouvez générer un identifiant pour chaque View que vous générez et définissez avec setId(). Voir generateViewId et setid.

Xiaochao Yang explique cela et ce qu'il faut faire avant API 17 dans une réponse à this Stack Overflow question.

Une fois que l'ID généré est défini, vous pouvez utiliser findViewById() pour rechercher la vue dans la disposition parente.

0

Vous pouvez utiliser des étiquettes.

Sur la mise en page la génération, vous pouvez assigner une balise (setTag()) aux éléments (1-x) et vous pouvez ensuite faire suivant:

final AdapterView.OnItemSelectedListener puttDistSelectListener = new AdapterView.OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    //add the putt# and distance to temp_putt_stats table 
    DbAdapter adapter = new DbAdapter(view.getContext()); 
    String distValue = parent.getItemAtPosition(position).toString(); 
    int tagNumber = (int) view.getTag(); 
    switch (tagNumber){ 
     case 0: //Inches 
      break; 
     case 1: //<3ft 
      break; 
     case 2: //<6 ft 
      break; 
     case 3: //<10 ft 
      break; 
     case 4: //10-20 
      break; 
     case 5: //20-30 
      break; 
     case 6: //30-40 
      break; 
     case 7: //> 40 
      break; 
    } 
    Toast.makeText(view.getContext(), "Position :"+position+" ListItem : " +distValue ,Toast.LENGTH_SHORT).show(); 

} 

Le texte de l'élément sélectionné pourrait être récupéré par

TextView tv = (TextView) view.findViewByTag(x); 
tv.getText(); 
+0

Je reçois 'NPE' la solution proposée – archiver

+0

vous devez également utiliser un adaptateur personnalisé pour les éléments de spinner (non arrayadapter) et onBindView dans ce nouvel adaptateur vous attribuer des balises aux textviews – ramden