0

我最近对我制作的应用程序的 iOS 版本进行了更新,我想将相同的功能放入 Android 版本中。基本上,它需要用户输入一年,他们从列表中选择,然后将前一年输入到我指定的文本字段的占位符文本中。当我查看如何在 Android 中执行相同的功能时,我发现我需要一个 OnItemSelectedListener。然而,这时麻烦就来了。添加必要的代码并将 AdapterView 导入我的 Activity 后,我的应用程序在首次启动时不断崩溃。由于我不确定它一直在哪里崩溃,这里是我的应用程序的 github 页面的链接

Github 实验分支

master 分支上的代码工作正常,所以这真的很奇怪。

由于这些文件很难破译,这里是我用来应用 OnItemSelectedListener 的代码:

// give Spinner a listener for new functionality to work
selection.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parentView, 
                               View selectedItemView, int position, long id) {
        // get year selection for use with new functionality
        int iyear = Integer.parseInt(selection.getSelectedItem().toString()); 
        balance.setHint(R.string.balance + " from 12/31/" + pyear.getPrevYear(iyear)); 
    }
    // create empty method
    public void onNothingSelected(AdapterView<?> parentView) {}
});
4

3 回答 3

0

我经历并从主分支复制了东西,事情开始工作而没有崩溃。现在,我遇到了提示问题,但是由于这个关于为什么它一直崩溃的问题,我不确定我是否可以保持这个问题的开放性。

于 2012-08-24T15:48:18.320 回答
0

在追踪错误时,我仍然看不到 LogCat,它是重要的信息...

所以这些是我的猜测:

  • 我看不到您在哪里定义适配器,selection所以我假设您在 XML 中执行此操作。您是否确认这selection.getSelectedItem().toString()是一个有效的字符串Integer.parseInt()

    如果您有权访问该数组(调用它selectionArray),您可以简单地使用:

    ... + pyear.getPrevYear(selectionArray[position]);
    
  • R.string.balance是一个整数,它引用您想要的字符串。显示您想要使用getString(R.string.balance)或可能使用的字符串本身getResources().getString(R.string.balance)

  • 验证您的变量都不为空:selection、、balancepyear

再解释一下第一点:

  1. 为数组和字符串创建一个类变量:

    int[] choicesArray;
    
  2. 在 onCreate() 中初始化它;

    choicesArray = getResources().getIntArray(R.array.choices_array);
    
  3. 在 OnItemSelectedListener 中使用:

    balance.setHint(getResources().getString(R.string.balance) + " from 12/31/" + (choicesArray[position] - 1)); 
    
于 2012-08-22T21:50:58.203 回答
0

确保在 setHint 时 var balance 不为空。可能是 findViewById 中的 id 不正确。确保 R.id.amount 是 R.layout.main 内部的视图。

于 2012-08-22T21:42:15.463 回答