java - 不能在内部类中使用变量
问题描述
我目前正在 Android Studio 中开发一个问答游戏,我很难解决在按钮的 OnClickListener 内部类中使用外部类变量所给出的错误。我需要使用这些变量来指定问题、选择和答案的数组索引。
这是代码
import android.content.Intent;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class info extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_info);
String [] questionsIT = {
"When did Windows 10 appear?",
"When did the first iPhone appear?",
"Who presented the iPhone 4?",
"What's the most widely used browser in the world?",
"Which language is Windows written in?",
"WHich country did the inventor of PHP language come from?",
"How many cores does a quad-core processor have?",
"Which company owns XBOX?",
"Which company owns PlayStation?",
"In which american state are the Google headquarters located?"
};
String [][] choicesIT = {
{"1989", "2015", "2002", "2012"},
{"1999", "2006", "2008", "2007"},
{"Steve Jobs", "Tim Cook", "Bill Gates", "Steve Wozniak"},
{"Microsoft Edge", "Internet Explorer", "Google Chrome", "Mozzila Firefox"},
{"C++", "Pascal", "Java", "Perl"},
{"Romania", "UK", "Greenland", "Germany"},
{"2 cores", "4 cores", "6 cores", "8 cores"},
{"Google", "Sony", "Samsung", "Microsoft"},
{"Microsoft", "Sony", "Apple", "Nokia"},
{"New York", "Texas", "Ohio", "California"}
};
final String [] answersIT = {
"2015",
"2007",
"Steve Jobs",
"Google Chrome",
"C++",
"Greenland",
"4 cores",
"Microsoft",
"Sony",
"California"
};
int[] picsID = {R.drawable.win10, R.drawable.iphone1, R.drawable.apple};
RelativeLayout rlinfo = findViewById(R.id.rlinfo); //se alege layout si se init var pt intrb
TextView intrbinfo = findViewById(R.id.intrbinfo);
Button ch1 = findViewById(R.id.ch1);
Button ch2 = findViewById(R.id.ch2);
Button ch3 = findViewById(R.id.ch3);
Button ch4 = findViewById(R.id.ch4);
final Button[] chooses = new Button[]{ch1, ch2, ch3, ch4};
for(i = 0; i<10; i++)
{
intrbinfo.setText(questionsIT[i]);
chooses[0].setText(choicesIT[i][0]);
chooses[1].setText(choicesIT[i][1]);
chooses[2].setText(choicesIT[i][2]);
chooses[3].setText(choicesIT[i][3]);
chooses[0].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(chooses[0].getText().equals(answersIT[i]))
{
Right(v);
score++;
}
}
});
}
}
public void Right(View v)
{
}
public void Wrong(View v2)
{
}
}
解决方案
推荐阅读
- sitecore - 在制作中上传媒体文件 404,但数小时后显示
- angular - 清晰度堆栈视图不适用于 Angular ngTemplateOutlet
- python - 重写为字典推导
- google-apps-script - 在 Apps 脚本中创建 YouTube 视频或频道 ID 验证
- java - 存储大于 16MB 的数据时,MongoDB Java 驱动程序通常会给出 BSONMaximumSizeExceededException 但有时会给出 MongoWriteException
- ios - 重用单元格时触发 UITableView
- java - 使用带有 ajax 请求的表单调用 Servelt (FIlter)(必须使用授权标头)
- latex - 有谁知道乳胶中小于或大于 \lessgtr 的符号代码
- reporting-services - 如何为报表中动态创建的矩阵中的列添加标题?
- php - 从特定用户获取列 INT 值