您好我的布局中有 3种textViews ,但动态文字相同,但它们之间只有一个差异。 位置。我想根据Button Click显示和隐藏它们。但是当我必须为只有一个 TEXT 的五个不同TextView编写相同的代码时,会出现问题。请建议我有效的方法,可以减少我的JAVA代码中的行数。
temperature.setText(temp);
txt.setText(Name);
descptxt.setText(descp);
temperature3.setText(temp);
txt3.setText(Name);
descptxt3.setText(descp);
temperature4.setText(temp);
txt4.setText(Name);
descptxt4.setText(descp);
未来将增加TextView的数量。我担心再次编写相同的Boiler Plate Code和Agian
答案 0 :(得分:1)
创建一个这样的函数:
void setText(String name,String temp,String descp){
for(int i=0;i<txt.size();i++){
temperature.get(i).setText(temp);
txt.get(i).setText(Name);
descptxt.get(i).setText(descp);
}
}
此外,不是为每个textview创建不同的变量,而是创建它的数组。
ArrayList<TextView> temperature=new ArrayList<TextView>();
temperature.add((TextView)findViewById(<id>));
//Same for rest of them
当你想改变文字时:
setText("","","");
答案 1 :(得分:1)
将每个对象存储在数组中,即。温度对象在一个单独的数组中。单独数组中的txt对象和单独数组中的descp对象。
创建一个类似
的方法 public void setTexts(String temp,String name,String desc){
for(TextView temperature : temperatureArray){
//Change for loop declaration according to your code
//set text for temperature
temperature.setText(temp);
}
for(TextView txt : txtArray){
//Change for loop declaration according to your code
//set text for txt
txt.setText(name);
}
for(TextView descp : descpArray){
//Change for loop declaration according to your code
//set text for descp
descp.setText(desc);
}
}
答案 2 :(得分:0)
如果您的TextView
在逻辑上组合在一起,则可能需要创建一个包含所有View
的复合词public class TemperatureView extends ViewGroup { //or whichever layout you use
private TextView textView1;
private TextView textView2;
private TextView textView3;
public void setData(TemperatureData data) {
textView1.setText(...);
textView2.setText(...);
textView3.setText(...);
}
}
:
{{1}}
在我看来,这是这种情况下最优雅的解决方案。
答案 3 :(得分:0)
你可以使用替代方法,你可以在父布局的子计数上应用循环而不是使用findViewById查找,然后使用运算符实例,你可以找到你想要执行任务的文本视图。