【问题标题】:Code improving: List of Views代码改进:视图列表
【发布时间】:2019-01-21 10:40:42
【问题描述】:

我有以下代码:

public class Klasse {
  TextView[] tvAuftrag = new TextView[5];
  ImageView[] ivStatus = new ImageView[5];
  CardView[] cvAuftrag = new CardView[5];

  private void initialize() {
    tvAuftrag[0] = findViewById(R.id.tvAuftrag1);
    tvAuftrag[1] = findViewById(R.id.tvAuftrag2);
    tvAuftrag[2] = findViewById(R.id.tvAuftrag3);
    tvAuftrag[3] = findViewById(R.id.tvAuftrag4);
    tvAuftrag[4] = findViewById(R.id.tvAuftrag5);
    ivStatus[0] = findViewById(R.id.ivStatus1);
    ivStatus[1] = findViewById(R.id.ivStatus2);
    ivStatus[2] = findViewById(R.id.ivStatus3);
    ivStatus[3] = findViewById(R.id.ivStatus4);
    ivStatus[4] = findViewById(R.id.ivStatus5);
    cvAuftrag[0] = findViewById(R.id.cvAuftrag1);
    cvAuftrag[1] = findViewById(R.id.cvAuftrag2);
    cvAuftrag[2] = findViewById(R.id.cvAuftrag3);
    cvAuftrag[3] = findViewById(R.id.cvAuftrag4);
    cvAuftrag[4] = findViewById(R.id.cvAuftrag5);
  }
}

是否有更好的解决方案将视图初始化为数组?我尝试了一个像这样的 ArrayList:

public class Klasse {
  List<TextView> tvAuftrag = ArrayList<>();

  private void initialize() {
    tvAuftrag.add(findViewById(R.id.tvAuftrag1));
    tvAuftrag.add(findViewById(R.id.tvAuftrag2));
    tvAuftrag.add(findViewById(R.id.tvAuftrag3));
    tvAuftrag.add(findViewById(R.id.tvAuftrag4));
    tvAuftrag.add(findViewById(R.id.tvAuftrag5));
  }
}

也许这可能比上述解决方案好一点,但它不起作用。或者甚至可以使用循环?那么我认为 ID 必须是可迭代的,但这怎么可能呢? 任何帮助或要了解的新信息将不胜感激。

【问题讨论】:

标签: java android arrays textview


【解决方案1】:

//如果不是数组,你要做的就是把它保存在一个列表中;

public class Klasse {
  List<TextView> tvAuftrag = new ArrayList<>();

  private void initialize() {
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag1));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag2));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag3));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag4));
    tvAuftrag.add((TextView)findViewById(R.id.tvAuftrag5));
  }
}

【讨论】:

    【解决方案2】:

    循环添加视图,例如:

        TextView[] tvAuftrag = new TextView[5];
        ImageView[] ivStatus = new ImageView[5];
        CardView[] cvAuftrag = new CardView[5];
    
        int id = 0;
    
        for (int i = 0; i < tvAuftrag.length; i++) {
            id = getResources().getIdentifier("tvAuftrag" + (i + 1), "id", getPackageName());
            tvAuftrag[i] = findViewById(id);
            id = getResources().getIdentifier("ivStatus" + (i + 1), "id", getPackageName());
            ivStatus[i] = findViewById(id);
            id = getResources().getIdentifier("cvAuftrag" + (i + 1), "id", getPackageName());
            cvAuftrag[i] = findViewById(id);
        }
    

    如果 3 个数组的长度不同,那么您必须有 3 个相似但不同的循环。

    【讨论】:

    • 这可能是最有前途的解决方案,但也许您和 Veysel Sebu 的两种解决方案的混合可能是解决它的聪明方法。我会在接下来的 6 小时内检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多