2

我有一个数组中的名称列表,单击其中的一个会将我带到一个记录屏幕,该屏幕显示名称和该名称的代码。信息以匹配长度的数组形式提供。我希望能够单击记录屏幕中的按钮,将我带到下一个名称的相应屏幕。

我从意图中获取了 listView 项的索引 i,然后使用它从数组中获取该名称的正确数据。

下面是我的记录屏幕代码。

public class RecordActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_record);

Intent intent = getIntent();
final int i = intent.getIntExtra(MainActivity.EXTRA_INDEX, 0);  

final String[]names = getResources().getStringArray(R.array.names);
final String[]codes = getResources().getStringArray(R.array.codes);

final TextView nameView = new TextView(this);
nameView = (TextView) findViewById(R.id.vNames);
String vName = names[i];
nameView.setText(vName);

TextView codeView = new TextView(this);
codeView = (TextView) findViewById(R.id.vCodes);
String vCode = codes[i];
codeView.setText(vCode);

nextButton = (Button) findViewById(R.id.nextButton);
nextButton.setOnClickListener(new OnClickListener(){
    public void onClick(View v) {

    }
    }});
}

在按钮的 onClick 方法中,我想做“设置 i=i+1,然后刷新数据”之类的操作,但是对于编程来说,我并不完全确定如何“编写”它。

我试过了

if (i<names.length) {
  nameView.setText(names[i]);
  i++;}

但我收到错误“我无法分配最终的局部变量,因为它是在封闭类型中定义的”。

我希望尽可能保持一般性,因为我希望有多达 12 个数组调用索引来显示信息。

任何想法都会非常感谢!

4

2 回答 2

2

你提到的具体问题在这里:

final TextView nameView = new TextView(this);
nameView = (TextView) findViewById(R.id.vNames);

标记为 final 的字段只能分配一次。在第一行中,您为其分配了一个新的 TextView,这完全是多余的,因为您想在下一行中从布局中分配对视图的引用,然后由于最终的 nameView 已经分配而失败。

final TextView nameView = (TextView) findViewById(R.id.vNames);

我也有同样的问题。只需删除 final 关键字,或者,如果您希望它是 final 的,请将其分配给不同的变量:

int x = i;
if (x<names.length) {
   nameView.setText(names[x]);
   x++;}
于 2012-11-01T16:00:14.007 回答
0

不要设置 i final - 而是使用

this.i

在 OnClickListener 方法中访问它。在正常的编码约定中,您可能不会使用 i 作为变量,但更清楚地表明它代表什么。

于 2012-11-01T16:02:41.243 回答