繁体   English   中英

将TextView设置为Array值

[英]Setting TextView to Array value

我正在尝试制作一个小型应用,该应用在EditText数字中接受输入,并从数组中获取相应的值,并将其显示在TextView中

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

    final EditText e = (EditText) findViewById(R.id.editText1);
    final TextView t = (TextView) findViewById(R.id.textView1);
    Button b = (Button) findViewById(R.id.button1);

    Resources res = this.getResources();

    String arr[] = getResources().getStringArray(R.array.example);

    final Editable input = e.getText();

    final String in2 = input.toString();
    int number = Integer.parseInt(in2);

    if(number < 0){
        t.setText("Input is too small");
    } else if (number > 666){
        t.setText("Input is too large");
    } else {
        final String out = arr[number].toString();
        b.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                t.setText(in2);
            }
        }); 
    } 
}

我想要它,如果输入为0并单击按钮,则TextView为A。

<string-array name="example">
    <item >A</item>
    <item >B</item>
    <item >C</item>
    <item >D</item>
</string-array>

不幸的是,每当我在模拟器或电话上启动它时,它立即崩溃。 有人知道我在做什么错吗?

问题是,当您启动应用程序时, editText为空。

因此in2等于"" ,因此您无法将此值解析为Integer。

将其移到您的onClick方法中:

b.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {                
        int number = Integer.parseInt(e.getText().toString());
        if(number < 0){
            t.setText("Input is too small");
        } else if (number >= arr.length){
            t.setText("Input is too large");
        } else {
            t.setText(arr[number]);
        }
    }); 
} 

好吧,仅通过查看代码,我认为它不会完成您想要实现的目标!

final Editable input = e.getText();

final String in2 = input.toString();
int number = Integer.parseInt(in2);

这发生在onCreate方法中。 因此,当应用程序运行时,它会立即尝试提取一些文本,但是没有要提取的内容,因此Integer.parseInt(in2)将抛出运行时异常。

这是我建议的工作流程,可能涉及一些代码重写。

在onCreate方法中:

  1. 完成后,通过findViewById获取所需的所有对象。

  2. 将侦听器设置为editText字段和按钮-editText的侦听器负责跟踪用户键入的任何更改。在侦听器给出的方法中,包括以下代码:

    stringFromEditText = editText.getText().toString();

    当然,您应该早些声明这些内容以使其起作用:

    字符串stringFromEditText;

    EditText editText;

之后,您可以调用一个updateTextView()方法(您自己定义)。 您甚至都不需要按钮! 一切都在侦听器的方法中完成(例如onTextChanged

updateTextView()方法中,不要忘记添加一些逻辑来处理错误的输入或空输入:当遇到错误的输入时,只需将stringFromEditText的值设置为“ 0”即可。 因此,您以后总是可以成功解析它->不再崩溃!

我知道提供所有代码并没有太详细。 但我希望这会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM