如何简化Android图像的开关案例?

时间:2015-02-11 22:57:56

标签: android loops switch-statement

假设我在Android中有一个很长的switch(case)块,我在循环中定义了我的图像:

    for(i=0;i<49;i++){
    switch(i)
    {

    case 0:
    imageFile.setBackgroundResource(R.drawable.img0);
    break;

    case 1:
    imageFile.setBackgroundResource(R.drawable.img1);
    break;

    (...)

    }}

是否还有其他解决方法来简化它?

5 个答案:

答案 0 :(得分:1)

我猜你可以把它作为你班级的静态字段放在Array中:

static int[] images = {R.drawable.img0,R.drawable.img1,R.drawable.img2...};

然后:

for(i=0;i<49;i++){
   imageFile.setBackgroundResource(images[i]);
 }

答案 1 :(得分:1)

对我来说,hashmap在你的情况下看起来更好。我认为。 在您的情况下,用数字替换第一个项目,用资源替换第二个项目。

HashMap map = new HashMap();
map.add( "cat", "Meow" );
map.add( "ape", "Squeak" );
map.add( "dog", "Woof" );
map.add( "bat", "Squeak" );
System.out.println( map );
System.out.println( "map.count( dog ) = " + map.count( "dog" ) );
HashMapIterator i = map.find( "dog" );
if ( i.equals( map.end() ) ) // A simpler way: if ( i.atEnd() ) ...
  System.out.println( "Could not find dog." );
else
  System.out.println( "Found " + i.get() );
System.out.println( "map.remove( dog ) = " + map.remove( "dog" ) );
HashMapIterator j = map.find( "dog" );
if ( j.atEnd() ) // A simpler way: if ( j.equals( map.end() ) ) ...
  System.out.println( "Could not find dog." );
else
  System.out.println( "Found " + j.get() );
}

答案 2 :(得分:1)

如果您不想在xml或代码中定义数组,可以使用类似

的内容
Resources res = getResources();
//assuming all your images name start with img
for(int i=0;i<49;i++){
    int id = res.getIdentifier("img" + i, "drawable", getPackageName());
    imageFile.setBackgroundResource(id);
}

希望这个帮助

答案 3 :(得分:1)

如果你想要非常懒惰并且没有初始化整个数组,这也可以正常工作

注意:

  

不鼓励使用此功能。按标识符检索资源比按名称检索资源要高效得多。

link

for(i=0;i<49;i++){
   getResources().getIdentifier("img"+Integer.toString(i), "drawable", getApplicationContext().getPackageName());
}}

答案 4 :(得分:1)

我认为这是正确的方法:

private static final int[] IMAGES = new int[]{R.drawable.img0, R.drawable.img1, R.drawable.img2};

而不是开关,请执行以下操作:

 for(i=0;i<49;i++){   
    imageFile.setBackgroundResource(IMAGES[i]);
  }