【问题标题】:Android: Spinner inside Dialog with "text message" when selectedAndroid:选择时带有“文本消息”的对话框内的微调器
【发布时间】:2013-08-26 01:36:00
【问题描述】:

我正在尝试将微调器更改为:按钮 > 对话框 > 微调器。

完美运行,但我看不到下面的消息(发生错误并关闭应用程序):

"You have selected English en-us", "You have selected Português pt-br"

之前:

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);
}

【问题讨论】:

  • “应用坏了”是什么意思?
  • @TenFour04 发生错误并关闭应用程序
  • 你能从日志中发布堆栈跟踪吗?
  • 谢谢。为了将来参考,您可以从日志中选择这些行并使用键盘快捷键将它们复制/粘贴到此处。可能比发布屏幕截图更容易。

标签: android text dialog spinner adapter


【解决方案1】:

您将获得 NPE,因为您将 AdapterView&lt;?&gt; parent 初始化为 null,并且在使用它之前从未对其分配任何内容。无论如何,你不需要它作为上下文。在您的两个Toast.makeText() 方法中,将parent.getContext() 替换为MainActivity.this。 Activity 是从上下文扩展而来的,因此您几乎总是可以将您的 Activity 用作需要上下文的方法中的上下文参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 2016-04-04
    • 2011-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多