2016-04-12 15 views
1

Spinner ürününü AlertDialog kullanarak silinen öğeyi silen bir Activity yapmaya çalışıyorum. Henüz bir şey silmiyorum, işe yaradığından emin olmak için bir Tost ekledim. Bir Spinner öğesinden bir AlertDialog kullanarak nasıl silinir

public class SpinnerActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_spinner); 

    final Spinner spinner = (Spinner) findViewById(R.id.spinner); 
    final Context context = getApplicationContext(); 

    // Create an ArrayAdapter using the string array and a default spinner layout 
    final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
      R.array.planets_array, android.R.layout.simple_spinner_item); 

    // Specify the layout to use when the list of choices appears 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Apply the adapter to the spinner 
    spinner.setAdapter(adapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     int selectionCurrent = spinner.getSelectedItemPosition(); 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      if (selectionCurrent != position) { 
       AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

       // set title 
       alertDialogBuilder.setTitle(R.string.dialogtitle); 

       //set dialog message 
       alertDialogBuilder.setMessage(R.string.dialogtext).setCancelable(false) 
         .setPositiveButton(R.string.si,new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog,int id) { 
           // if this button is clicked, 
           Toast.makeText(context, "Eliminar", Toast.LENGTH_SHORT).show(); 
          } 
         }) .setNegativeButton(R.string.no 
         , new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // if this button is clicked, do nothing 
         dialog.cancel(); 
        } 
       }); 
       alertDialogBuilder.setView(spinner); 
       AlertDialog alertDialog = alertDialogBuilder.create(); 
       // show it 
       alertDialog.show(); 
      } 
      selectionCurrent = position; 
     } 

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

     } 
    }); 

} 

ben kod çalıştırmasına

, aşağıdaki hata görüntülenir:

Bu

benim kodudur ben alertDialog.show(); önce ((ViewGroup)spinner.getParent()).removeView(spinner); kullanmaya çalıştı java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

ama yine de çalışmıyor.

Diyor ki android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

herkes sorunu çözmek için nasıl bilir?

String[] mTestArray; 

kaynaklarından verileri alın:

mTestArray = getResources().getStringArray(R.array.planets_array); 

bu dizi ArrayAdapter şişirin:

final ArrayList<String> list =new ArrayList<String>(Arrays.asList(mTestArray)); 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item, list); 

Ve nihayet kaldırmak

+0

Yalnızca 'AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder (SpinnerActivity.this) ' –

+0

@MD'de' Activity context 'seçeneğini kullanın. Bunu yaptım ancak şimdi tamamen spinner kaldırır. –

+0

Bu hatayı tam olarak nereden alıyorsunuz, çünkü onları kaldırmaya çalıştığınızı görmüyorum? [Buraya kendi listenizle birlikte bakmaya bakın] isteyebilirsiniz (http://stackoverflow.com/questions/19820803/android-spinner-using-arrayliststring/19820912#19820912) ve ardından listeyi listeden kaldırın ve bağdaştırıcıyı güncelleyin. görünümü kendiliğinden kaldırmaya çalışmayın. – codeMagic

cevap

1

İlk ArrayAdapter şişirmek için bir değişken oluşturmak iletişim kutusunda:

final ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, 
     mTestArray , android.R.layout.simple_spinner_item); 

     String item = list.get(position); 


@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    if (selectionCurrent != position) { 
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context); 

     // set title 
     alertDialogBuilder.setTitle(R.string.dialogtitle); 

     //set dialog message 
     alertDialogBuilder.setMessage(R.string.dialogtext).setCancelable(false) 
       .setPositiveButton(R.string.si,new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog,int id) { 
         list.remove(position); 
         adapter.notifyDataSetChanged(); 
         // if this button is clicked, 
         Toast.makeText(context, "Eliminar", Toast.LENGTH_SHORT).show(); 
        } 
       }) .setNegativeButton(R.string.no 
       , new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       // if this button is clicked, do nothing 
       dialog.cancel(); 
      } 
     }); 
     alertDialogBuilder.setView(spinner); 
     AlertDialog alertDialog = alertDialogBuilder.create(); 
     // show it 
     alertDialog.show(); 
    } 
    selectionCurrent = position; 
}   
+0

Bir adaleti kastettiğinden dizi adaper'ı şişiremiyorum ve mTestArray bir String'dir [] –

+0

Benim hatam Bağdaştırıcıyı oluşturduğunuz yolu kontrol etmedim: P, şimdi değişikliklerimı denetle ve kullanıp kullanmadığımı söyle –

+0

çalışmak, bir öğeye tıklandığında bir hata görüntülemeye devam eder (iletişim kutusu açılırken desteklenir). Görünümü ((ViewGroup) döndürücü.getParent() ile kaldırdığımda. RemoveView (döndürücü); –

İlgili konular