2013-08-25 7 views
1

내 회 전자를 Button> Dialog> Spinner로 변경하려고합니다.Android : Spinner의 "텍스트 메시지"를 선택한 경우

작품 완벽하게,하지만 아래의 메시지를 볼 수 없습니다 (오류가 발생하고 응용 프로그램을 닫습니다) :

"당신은 포르투갈어의 PT-BR 선택"

"우리가 KO-당신이 영어를 선택했다"

전 :

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

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

      if (pos == 0) { 
       Toast.makeText(parent.getContext(), 
         "You have selected English en-us", Toast.LENGTH_SHORT) 
         .show(); 
       setLocale("en"); 
      } else if (pos == 1) { 
       Toast.makeText(parent.getContext(), 
         "You have selected Português pt-br", Toast.LENGTH_SHORT) 
         .show(); 
       setLocale("br"); 
      } 
     } 
     public void onNothingSelected(AdapterView<?> arg0) 
     { 
     } 
    }); 
} 

public void setLocale(String lang) 
{ 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
} 

내 새로운 코드 :

Button bt_lang = (Button) findViewById(R.bt.language); 
    bt_lang.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
       AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
       builder.setTitle("Select Language"); 
       builder.setAdapter(adapter, new DialogInterface.OnClickListener() 
       { 
        @Override 
        public void onClick(DialogInterface dialog, int which) 
        { 
         AdapterView<?> parent = null; 
         switch(which) 
         { 
          case 0: 
          setLocale("en"); 
          Toast.makeText(parent.getContext(), 
            "You have selected English en-us", Toast.LENGTH_SHORT) 
            .show(); 

          case 1: 
          setLocale("br"); 
          Toast.makeText(parent.getContext(), 
            "Você selecionou Português pt-br", Toast.LENGTH_SHORT) 
            .show(); 
          break; 
         } 
         dialog.dismiss(); 
        } 
       }); 
       builder.create(); 
       builder.show(); 
     } 
    }); 
} 
    public void setLocale(String lang) 
{ 
    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
} 
+0

"앱이 고장났다"는 것은 무엇을 의미합니까? – Tenfour04

+0

@ TenFour04 오류가 발생하고 응용 프로그램이 닫힙니다 – user2714605

+0

로그에서 스택 추적을 게시 할 수 있습니까? 여기 – Tenfour04

답변

0

당신은 요 때문에 NPE가 있어요 u AdapterView<?> parent을 null로 초기화하고, 사용하기 전에 아무 것도 지정하지 마십시오. 어쨌든 컨텍스트에는 그 필요가 없습니다. Toast.makeText() 메서드에서 parent.getContext()MainActivity.this으로 바꿉니다. 컨텍스트에서 활동이 확장되므로 컨텍스트가 필요한 메소드에서 컨텍스트 인수로 활동을 거의 항상 사용할 수 있습니다.

+0

완벽한! 감사! – user2714605

관련 문제