android - 我怎样才能循环通过一堆按钮来减少代码?
问题描述
嗨
,我有这段代码,我需要对相同类型的不同对象进行相同的操作,比如初始化一堆按钮并设置每次文本的值,现在我的代码如下所示:
public void inizializzazioneGrafica(){
txtprimaCarta = (TextView)findViewById(R.id.txt_primaCarta);
punteggioG1 = (TextView)findViewById(R.id.punteggioG1);
punteggioG2 = (TextView)findViewById(R.id.punteggioG2);
btn_g1_1 =(Button)findViewById(R.id.btn_g1_1);
btn_g1_2 =(Button)findViewById(R.id.btn_g1_2);
btn_g1_3 =(Button)findViewById(R.id.btn_g1_3);
btn_g2_1 =(Button)findViewById(R.id.btn_g2_1);
btn_g2_2 =(Button)findViewById(R.id.btn_g2_2);
btn_g2_3 =(Button)findViewById(R.id.btn_g2_3);
}
public void aggiornaGrafica(){
txtprimaCarta.setText(Integer.toString(tavolo.getBriscola().getNumero())+"\n"+tavolo.getBriscola().getSeme().toString());
punteggioG1.setText("Punteggio: "+Integer.toString(giocatore1.getPunteggio()));
punteggioG2.setText("Punteggio: "+Integer.toString(giocatore2.getPunteggio()));
btn_g1_1.setText(Integer.toString(giocatore1.carte.get(0).getNumero())+" "+giocatore1.carte.get(0).getSeme().toString());
btn_g1_2.setText(Integer.toString(giocatore1.carte.get(1).getNumero())+" "+giocatore1.carte.get(1).getSeme().toString());
btn_g1_3.setText(Integer.toString(giocatore1.carte.get(2).getNumero())+" "+giocatore1.carte.get(2).getSeme().toString());
btn_g2_1.setText(Integer.toString(giocatore2.carte.get(0).getNumero())+" "+giocatore2.carte.get(0).getSeme().toString());
btn_g2_2.setText(Integer.toString(giocatore2.carte.get(1).getNumero())+" "+giocatore2.carte.get(1).getSeme().toString());
btn_g2_3.setText(Integer.toString(giocatore2.carte.get(2).getNumero())+" "+giocatore2.carte.get(2).getSeme().toString());
btn_g1_1.setBottom(Color.LTGRAY);
btn_g1_2.setBottom(Color.LTGRAY);
btn_g1_3.setBottom(Color.LTGRAY);
btn_g2_1.setBottom(Color.LTGRAY);
btn_g2_2.setBottom(Color.LTGRAY);
btn_g2_3.setBottom(Color.LTGRAY);
}
我能做些什么来减少代码行数?
我想也许使用 for 循环,但我不知道如何每次调用不同的按钮,因为它们有一个唯一的名称,有人可以帮我吗?
解决方案
要减少用于绑定视图的代码(在您的inizializzazioneGrafica
方法中),您可以使用ButterKnife库。您的代码将是这样的:
public class YourActivity extends Activity {
@BindView(R.id.txt_primaCarta) TextView txtprimaCarta;
@BindView(R.id.punteggioG1) TextView punteggioG1;
@BindView(R.id.btn_g1_1) Button btn_g1_1;
@BindView(R.id.btn_g1_2) Button btn_g1_2;
@BindView(R.id.btn_g1_3) Button btn_g1_3;
@BindView(R.id.btn_g2_1) Button btn_g2_1;
@BindView(R.id.btn_g2_2) Button btn_g2_2;
@BindView(R.id.btn_g2_3) Button btn_g2_3;
...
public void aggiornaGrafica(){
...
}
}
为了简化你aggiornaGrafica
,你可以使用二维数组或列表(如 ArrayList),但它不会给你任何东西,但你的代码会很复杂。追求效果而不是效率。
推荐阅读
- javascript - 如何从数组数组中的对象中获取
- graphql - Hasura 限制基于字段的数据
- javascript - 从深度嵌套数组中按值过滤数组
- node.js - Sequelize-CLI、Postgres、Heroku 生产 TypeError [ERR_INVALID_ARG_TYPE]:“url”参数必须是字符串类型。接收类型未定义
- javascript - .reduce 返回 concat 而不是总和
- javascript - 尝试在 express 上访问表单数据文件时返回“未定义”
- discord.js - 使用命令 discord.js 更改变量
- java - 如何在不影响其他集合的情况下编写联合方法?
- javascript - Javascript:将文本映射到异步函数
- swift - 如何找出我应该在 Swift 中添加哪些方法?