如何在for循环中实现TextView对象数组?

时间:2017-10-05 07:42:51

标签: android for-loop optimization textview

我希望通过使用for循环将TextView对象a,b,c,d,e作为数组元素来最小化代码。适用于findViewById和setOnClickListener实现。这个特定编码的任何可操作的演练都非常感谢!^ __ ^

  • 以下是我通常的TextView实现方式。但是我 我厌倦了不必要的写这么多行。

    TextView a,b,c,d,e;

        a=(TextView)findViewById(R.id.A);
        b=(TextView)findViewById(R.id.B);
        c=(TextView)findViewById(R.id.C);
        d=(TextView)findViewById(R.id.D);
        e=(TextView)findViewById(R.id.E);
    
        a.setOnClickListener(this);
        b.setOnClickListener(this);
        c.setOnClickListener(this);
        d.setOnClickListener(this);
        e.setOnClickListener(this);
    
  • 我的问题是我是否可以使用循环来设置已经初始化的所有内容 TextView对象可以毫无问题地调用setOnClickListener() 如下所示:

    TextView a,b,c,d,e;
    
    a=(TextView)findViewById(R.id.A);
    b=(TextView)findViewById(R.id.B);
    c=(TextView)findViewById(R.id.C);
    d=(TextView)findViewById(R.id.D);
    e=(TextView)findViewById(R.id.E);
    

    TextView [] textViews = {a,b,c,d,e};

    for (int count = 0; count < textViews.length; count++) {
        textViews[count].setOnClickListener(this);
    }
    

**

  • 我想知道的是如何初始化TextView对象 a,b,c,d,e以同样的方式,我为他们展示了setOnClickListener?像这样的东西,

    TextView[] textViews = {a, b, c, d, e};
    
    int[] textViewIds = {R.id.a, R.id.b, R.id.c, R.id.d, R.id.e};
    
    for (int count = 0; count < textViews.length; count++) {
        textViews[count] = (TextView)findViewById(textViewIds[count]);
    }
    

**

3 个答案:

答案 0 :(得分:3)

这就是我写它的方式(我这里没有编译器,所以很抱歉错误)

ArrayList<TextView> textViews = new ArrayList<TextView>();

int[] tvIds = {R.id.A,R.id.B,R.id.C,R.id.D,R.id.E};

for(int index= 0; index<tvIds.length/* or .count forgot sorry*/; index++){   

 TextView tv = (TextView)findViewById(tvIds[index]));
 tv.setOnClickListener(this);

 textViews.add(tv);

}

或者你可以使用@Hank Moody回答的内容,但是刀具很简单。

答案 1 :(得分:2)

我使用ButterKnife进行视图绑定,它有很好的方法可以做你想要的。

首先,您可以在List

中绑定视图
@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<TextView> nameViews;

然后,您可以使用&#34; Action&#34;将不同的操作应用于此列表,如下所示:

static final ButterKnife.Action<View> SET_CLICK = new ButterKnife.Action<View>() {
@Override
public void apply(View view, int index) {
    view.setOnClickListener(....listener);
  }
};

然后应用此操作

ButterKnife.apply(nameViews, DISABLE);

参见示例here

UPD:如果您使用的是Kotlin,请参阅Kotter Knife

答案 2 :(得分:2)

//在类的开头将视图对象声明为全局变量

View[] views ={v_home, v_earning, v_rating, v_account};
int[] viewsID ={R.id.v_home, R.id.v_earning, R.id.v_rating, R.id.v_account};

//为视图创建视图数组,为视图ID创建int数组

for (int v=0;v<views.length;v++){
        views[v] = findViewById(viewsID[v]);
        views[v].setOnClickListener(this);
    }

//然后在for循环

中找到findViewById和setOnClickListener
{{1}}