2014-04-17 53 views
0

我正在处理一个布局,该布局托管许多自定义视图。每个自定义视图都具有“myname:num”属性,该属性包含唯一数字值。android通过属性查找自定义视图

问题:如何通过“num”属性找到视图?通常我会使用findViewById()方法,但由于“android:id”不能是数字,我必须找到另一个解决方案。

布局定义:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myname="http://schemas.android.com/apk/res/com.example" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <com.example.custom.MyView 
      myname:num="17" 
      myname:type="2" /> 
     <com.example.custom.MyView 
      myname:num="18" 
      myname:type="2" /> 
     <com.example.custom.MyView 
      myname:num="19" 
      myname:type="2" /> 
    </LinearLayout> 
</LinearLayout> 

回答

1

给每一个视图ID,然后在你的活动,你可以动态使用

int dynamicId = getResources().getIdentifier("*unique_id*", "id", "*package_name*"); 
findViewById(dynamicId); 

所以,如果你id'ed每个增量为view_1调用每个视图,view_2,... view_numViews然后,您可以使用类似循环的方式动态获取它们

for(int i = 1; i <= numViews; i ++){ 
    int dynamicId = getResources().getIdentifier("view_" + i, "id", "*package_name*"); 
    MyView view = (MyView) findViewById(dynamicId); 
} 
+2

你应该缓存所有这些,否则它会非常慢。 – rupps

相关问题