通过循环中的ID访问资源

时间:2013-11-05 21:21:17

标签: android

我在布局中有很长的EditText元素列表,实际上这些元素用于获取矩阵输入,矩阵大小可能会有所不同3x3 5x5 ...

元素的id是一系列模式,如11,12,13,21,22,23 ... 现在有一种方法可以在像

这样的循环中使用它们
for(int i=0;i<10;i++)
a = findViewById("R.id.kernel1"+i);

当然,目前上面简单的连接不会工作,但是有办法吗?     

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="@dimen/marginOne"
    android:text="@string/matrixTitle"
    android:textAppearance="?android:attr/textAppearanceLarge" />

<EditText
    android:id="@+id/kernel11"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" >

    <requestFocus />
</EditText>

<EditText
    android:id="@+id/kernel12"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:layout_alignParentLeft="true"
    android:inputType="numberSigned" >
</EditText>

<EditText
    android:id="@+id/kernel13"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel14"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel15"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel21"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel22"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel23"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel24"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel25"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel31"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel32"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel33"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel34"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel35"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel41"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel42"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel43"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel44"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel45"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel51"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel52"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel53"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel54"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<EditText
    android:id="@+id/kernel55"
    android:layout_width="@dimen/matrixBoxWidthHeight"
    android:layout_height="@dimen/matrixBoxWidthHeight"
    android:inputType="numberSigned" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Apply Kernel Mask" />

3 个答案:

答案 0 :(得分:2)

我做那样的事情。我需要在一个地方找到6种不同的资源。

  for (int i = 0; i < 6; i++ ){
          String fname = "p" + i;
          int id = context.getResources().getIdentifier(fname, "drawable", "com.example.yourproject");
          if (id == 0) {
              Log.e(TAG, "Lookup id for resource '"+fname+"' failed");
              // graceful error handling code here
          }
         scoresBm[i] =  (Bitmap) BitmapFactory.decodeResource(context.getResources(), id);

  }

答案 1 :(得分:2)

更好的方法

访问原始资源的示例。

ArrayList<Integer> id = new ArrayList<Integer>();
for (int i = 0; i <= 10; i++) {
  id.add(getResources().getIdentifier("d"+i, "raw", getPackageName()));
}

答案 2 :(得分:0)

以务实的方式做得更好,例如创建新的xml布局

layout.xml内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/parent"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
</LinearLayout> 

现在在您的活动中添加视图到循环示例的布局

LinearLayout parent = (LinearLayout) findViewById(R.id.parent);

for(int i=0;i<10;i++)
{
   EditText etext = new EditText(this);
   //the Id and Tag must be set to call it back if we need info from this field
   etext.setId(i);
   etext.setTag("kernel"+i);
   //add edit text info here such as values and h/w etc
   etext.setText("my id : "+i+" , My Tags is : t"+i);

   //now add EditText field to parent
   parent.addView(etext);
}

并且以实用方式调用任何EditText或任何其他视图,您可以从tag或id调用它,例如

 //get last element added from loop by id
 EditText last = (EditText) parent.findViewById(10);
 //or get by tag 
 EditText last = (EditText) parent.findViewWithTag("kernel10");

希望这个帮助