J'ai développé une application dans laquelle j'ai une valeur de texte d'édition du texte d'édition est entrée dans le bouton Spinner sur le bouton cliqué sur l'élément que j'ai sélectionné pour supprimer est supprimé mais que le problème est que lorsque je supprime le dernier élément de Spinner Whole Spinner liste des flushes. Je veux supprimer uniquement l'élément sélectionné (seulement le dernier élément)
Mon code est comme suit: P>
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /////////////////////////////////////////////////////////////// // grab our UI elements so we can manipulate them (in the case of the // Spinner) // or add listeners to them (in the case of the buttons) m_myDynamicSpinner = (Spinner) findViewById(R.id.dynamicSpinner); m_addItemText = (EditText) findViewById(R.id.newSpinnerItemText); Button addButton = (Button) findViewById(R.id.AddBtn); Button clearButton = (Button) findViewById(R.id.ClearBtn); // ////////////////////////////////////////////////////////////// // create an arrayAdapter an assign it to the spinner m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item); ((ArrayAdapter) m_adapterForSpinner) .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); m_myDynamicSpinner.setAdapter(m_adapterForSpinner); // m_adapterForSpinner.add("dummy item"); // ////////////////////////////////////////////////////////////// // add listener for addButton addButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { addNewSpinnerItem(); } }); clearButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { clearSpinnerItems(); } }); } // ////////////////////////////////////////////////////////////// // add listener for addButton private void addNewSpinnerItem() { Log.v("TAG", "addNewSpinnerItems called"); if (m_addItemText.getText().length() == 0) {// ||(m_addItemText.getText().toString()== // " ")){ Log.v("In if cndtn", "textHolder is of length 0"); Toast.makeText(getApplicationContext(), "The textView is empty", Toast.LENGTH_LONG).show(); //m_myDynamicSpinner.clearFocus(); //m_myDynamicSpinner.setFocusable(false); //m_addItemText.setFocusable(true); } else { CharSequence textHolder = "" + m_addItemText.getText(); // else{ Log.v("else", textHolder + ""); // m_adapterForSpinner.add(textHolder); // } ((ArrayAdapter) m_adapterForSpinner).add(textHolder); } m_addItemText.setText(""); } private void clearSpinnerItems() { // m_adapterForSpinner.clear(); Log.v("TAG", "clearSpinnerItems called"); m_myDynamicSpinner .setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // TODO Auto-generated method stub Log.v("TAG", "Itemseleted to be removed is " + m_adapterForSpinner.getItem(pos).toString()); Log.v("Position of item", pos + ""); Object t = m_adapterForSpinner.getItem(pos); Log.v("Object t ", (String) t); ((ArrayAdapter) m_adapterForSpinner).remove((CharSequence) t); Log.v("Item removed", t + ""); // m_myDynamicSpinner.setSelected(false); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } }); // m_adapterForSpinner.add("dummy item"); }
4 Réponses :
Pour supprimer tous les éléments Utilisez:
mySpinner.setAdapter(m_adapterForSpinner);
Dans mon cas, myspinner.setadapter (NULL); Jette une exception!
Réglage @Chenosic L'adaptateur sur NULL retirera la connexion entre la spinner et l'adaptateur, nous essayons en fait de supprimer uniquement les éléments de l'adaptateur.
J'ai eu le même problème. Faire cela a résolu le problème en vidant la fileuse:
N'oubliez pas que les méthodes "Supprimer" et "Effacer" ne fonctionnent pas avec ArrayAdapter pour Android 2.3.3 et plus bas. Vous recevrez un message d'erreur "Opération non prise en charge .... bla bla bla". Peut-être qu'ils travaillent avec Android 4.0 et plus, je ne sais pas. Voici ma solution qui fonctionne même avec MinsDkversion = "5".
Créez Spinner et remplissez-la avec des données de test Ce code est sous un formulaire d'activité. Utilisez ArrayList comme source de données pour arrayadapter au lieu d'une matrice. C'est important car vous utiliserez sa méthode "Supprimer" plus tard P>
List<String> reportFiles = new ArrayList<String>(); //fill some test data reportFiles.add("aaaaaaaaaaaaa"); reportFiles.add("bbbbbbbbbbbbb"); reportFiles.add("ccccccccccccc"); //create spinner from corresponding layout xml file Spinner spnReport = (Spinner) findViewById(R.id.spinner_report); //create ArrayAdapter ArrayAdapter reportAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, reportFiles); //set adapter to spinner spnReport.setAdapter(reportAdapter); //select first item in adapter - is not obligatory spnReport.setSelection(0);
Supprimer l'élément sélectionné de Spinner P>
reporterfiles.remove ((string) sphreport.getselectedem ()); code> p>
// créer un nouveau arrayadapter avec une arrayliste modifiée
ReportAdapter = nouveau arrayadapter (ceci, android.r.layout.simple_spinner_dropdown_item, reports de compte); code> p>
// Définissez un nouvel adaptateur de tableau sur Spinner
SPNREPORT.SetAdapter (ReportAdapter); Code> P>
// sélectionne premier élément
SPNREPORT.SETSELLECTION (0); CODE> P> LI>
ol> p>
Pour moi, la réponse acceptée a lancé une exception alors ce que j'ai fait était ceci.
@Shruthi Si u cliquez sur Supprimer le bouton La valeur sélectionnée doit être supprimée mais maintenant toutes les valeurs sont supprimées correctement?