我希望通过使用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]);
}
**
答案 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}}