2014-11-21 3 views
-1

나는 스피너를 여는 데 문제가있다. 처음 열 때 제대로 열리고 내가 선택할 수 있습니다. 내가 그것을 두 번째 시간을 열려고하면 다음 그것은 나에게 오류를 제공합니다먼저 하위 페어런트에서 removeview를 호출해야합니다. 안드로이드

11-21 18:43:49.589: E/AndroidRuntime(3178): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. 

내 스피너하여 ImageButton에 클릭에 열립니다. 여기에 코드 :

final ArrayAdapter<String> adp = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, s); 
    final Spinner sp = new Spinner(this); 
    final AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    ImageButton bracket = (ImageButton) findViewById(R.id.imageButton1); 
    bracket.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 
      sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
        choosed_bracket = (String) sp.getItemAtPosition(i); 
       } 

       public void onNothingSelected(AdapterView<?> adapterView) { 
        return; 
       } 
      }); 
      sp.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      sp.setAdapter(adp); 

      builder.setTitle("Choose war bracket:"); 
      builder.setView(sp); 
      builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        /*SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putString("bracket", choosed_bracket); 
        editor.commit(); */ 
        Toast.makeText(getApplicationContext(), "Choosed bracket is: " + choosed_bracket, Toast.LENGTH_LONG).show(); 
       } 
      }); 
      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.cancel(); 
       } 
      }); 
      builder.create().show(); 
     } 
    }); 

희망을 도와주세요!

답변

1

외부에서 대신 onclick 이벤트에서 빌더를 인스턴스화하려고 했습니까?

ImageButton bracket = (ImageButton) findViewById(R.id.imageButton1); 
    bracket.setOnClickListener(new OnClickListener() { 
     public void onClick(View arg0) { 
      ArrayAdapter<String> adp = new ArrayAdapter<String>(arg0.getContext(), android.R.layout.simple_spinner_item, s); 
      Spinner sp = new Spinner(arg0.getContext()); 
      AlertDialog.Builder builder = new AlertDialog.Builder(arg0.getContext()); 
      sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
        choosed_bracket = (String) sp.getItemAtPosition(i); 
       } 

       public void onNothingSelected(AdapterView<?> adapterView) { 
        return; 
       } 
      }); 
      sp.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      sp.setAdapter(adp); 

      builder.setTitle("Choose war bracket:"); 
      builder.setView(sp); 
      builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        /*SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putString("bracket", choosed_bracket); 
        editor.commit(); */ 
        Toast.makeText(getApplicationContext(), "Choosed bracket is: " + choosed_bracket, Toast.LENGTH_LONG).show(); 
       } 
      }); 
+0

woohoo! 고마워요! 그것은 효과가있다! – user1671523

관련 문제