将视图设置为全局变量android

时间:2016-12-05 19:30:13

标签: android

我在Main班,onCreateonClickclick中有三个功能,我有两个选项,声明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个视图,将它们声明为全局变量会更好吗?我大部分时间都在使用全局变量读取并不是很好,而且它违背了函数的整体思想,但这里似乎更简单..抱歉我的英文,谢谢大家。

1 个答案:

答案 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")
 }