我在Main
班,onCreate
,onClick
和click
中有三个功能,我有两个选项,声明TextViews
和其他一些观点作为全局变量的项目的开头,这意味着它们将保留在整个应用程序生命周期中,或者在每个函数中单独获取它们(将使计算机工作更多但变量不会一直保留在内存中)。进一步描述这个问题:
选项1:
public static final int L = 6;
TextView[] textViews = new TextView[L];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Random rand = new Random();
int[] digits = {rand.nextInt(10), rand.nextInt(10), rand.nextInt(10), rand.nextInt(10), rand.nextInt(10), rand.nextInt(10)};
for (int i = 0; i < L; i++) {
textViews[i] = (TextView) findViewById(getResources().getIdentifier("num" + String.valueOf(i), "id", getPackageName()));
textViews[i].setOnClickListener(this);
textViews[i].setText(String.valueOf(digits[i]));
}
}
@Override
public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.num0:
click(0);
break;
case R.id.num1:
click(1);
break;
case R.id.num2:
click(2);
break;
case R.id.num3:
click(3);
break;
case R.id.num4:
click(4);
break;
case R.id.num5:
click(5);
break;
}
}
public void click(int clicked) {
textViews[clicked].setText("Clicked");
}
选项2 :(注意缩短你的时间 - 改变是在最后一个功能中。)
public static final int L = 6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Random rand = new Random();
int[] digits = {rand.nextInt(10), rand.nextInt(10), rand.nextInt(10), rand.nextInt(10), rand.nextInt(10), rand.nextInt(10)};
for (int i = 0; i < L; i++) {
textViews[i] = (TextView) findViewById(getResources().getIdentifier("num" + String.valueOf(i), "id", getPackageName()));
textViews[i].setOnClickListener(this);
textViews[i].setText(String.valueOf(digits[i]));
}
}
@Override
public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.num0:
click(0);
break;
case R.id.num1:
click(1);
break;
case R.id.num2:
click(2);
break;
case R.id.num3:
click(3);
break;
case R.id.num4:
click(4);
break;
case R.id.num5:
click(5);
break;
}
}
public void click(int clicked) {
((TextView) findViewById(getResources().getIdentifier("num" + String.valueOf(clicked),"id",getPackageName())).setText("Clicked");
}
考虑到我有一个TextView
数组,并且在某些函数中我必须再次获得5个视图,将它们声明为全局变量会更好吗?我大部分时间都在使用全局变量读取并不是很好,而且它违背了函数的整体思想,但这里似乎更简单..抱歉我的英文,谢谢大家。
答案 0 :(得分:1)
首先,如果全局声明textViews
对象,则无需担心性能问题。这是微不足道的。
现在在您的代码中,如果声明textViews
数组对象的唯一理由是在click()
方法中引用它,那么就不需要全局声明它。
相反,您可以将覆盖的onClick()
方法提供的视图对象传递给click()
方法。
@Override
public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.num0:
click(view);
break;
case R.id.num1:
click(view);
break;
case R.id.num2:
click(view);
break;
case R.id.num3:
click(view);
break;
case R.id.num4:
click(view);
break;
case R.id.num5:
click(view);
break;
}
}
public void click(View viewClicked) {
((TextView))viewClicked.setText("Clicked")
}