如何在int数组中获取R.id?

时间:2012-02-24 03:31:59

标签: android android-layout

我想在我的ObjectsClass中获取我在image1.xml中的图像视图的ID,并且我在GamePlayActivity中夸大了这个布局...我的ObjectClass不是活动,那么如何在该类中获取id的数组...这是我的level.xml说有15个我刚刚展示的ImageView ....

     <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/gmw_01"
 android:onClick="onClick"
 android:layout_height="wrap_content" 
android:layout_width="wrap_content"
 android:id="@+id/relativeLayout1" >
 <ImageView 
android:onClick="objectClick" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:id="@+id/imageView1"
 android:src="@drawable/bb01" 
android:layout_marginLeft="998dp" 
android:layout_marginTop="593dp" 
android:layout_alignParentTop="true"
 android:layout_alignParentLeft="true"/>
 <ImageView 
android:onClick="objectClick"
 android:layout_height="wrap_content" 
android:layout_width="wrap_content"
 android:id="@+id/imageView2"
 android:src="@drawable/bb02"
 android:layout_marginLeft="20dp" 
android:layout_marginTop="39dp" 
android:layout_alignParentTop="true"
 android:layout_alignParentLeft="true"/>
 <ImageView
 android:onClick="objectClick"
 android:layout_height="wrap_content" 
android:layout_width="wrap_content"
 android:id="@+id/imageView3"
 android:src="@drawable/bb03" 
android:layout_marginLeft="497dp" 
android:layout_marginTop="153dp"
 android:layout_alignParentTop="true" 
android:layout_alignParentLeft="true"/>

这是我的GameplayActivity

 public class GamePlayActivity extends Activity {

    static int ObjectsFound;


     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.gameplay);


            // ViewGroup where n number of view is going to added
            ViewGroup layout= (ViewGroup) findViewById(R.id.GamePlayScreen);

             // inflating the layout depending on the level 
            View level = View.inflate(this, LevelSelectionActivity.levelscreen, null);

            ** getRandom();    // here I want to call that random because this should be done     before my level is added on the view**

    // adding level bg for the respective selected level
            layout.addView(level);
}   

 public void objectClick(View objectClicked)
     {
         Toast msg;
         int Object = objectClicked.getId();
         ImageView img= (ImageView)findViewById(objectClicked.getId());
        switch (Object) {
        case R.id.imageView1:   
             img.setVisibility(View.INVISIBLE);
             msg = Toast.makeText(GamePlayActivity.this, "Bubble Found", Toast.LENGTH_SHORT);
             msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);
             msg.show();

            break;

        }
}

和ObjectClass

    public class Objects {


     int ObectId[];

     Objects(Context context)
     {
         super();
         for(int i=0;i<15;++i)
         {
             **ObectId[i]=R.id.;**     // what to get it over here  ? ? ? 
         }

     }

     public void randomize() {
   Random generator = new Random();
   for(int i = 0; i<8 ; i++) {
       while(true) {
           **View v = findViewById(generator.nextInt(Objectid.length));**
           if(!v.isClickable()) {
                v.setClickable(false);
                break;
           }
       }
   }
}


}

最后我希望随机数量的对象无法点击,即15个对象中的每一个用户只能在屏幕上点击8个对象,所以在我的等级开始之前,即在我在我的游戏玩法中充气之前,我想得到随机8可点击,反之亦然...

除此之外它应该适用于所有级别...现在我有一个level1.xml如何实现所有级别...我需要在所有布局中给出相同的图像视图ID吗?

3 个答案:

答案 0 :(得分:1)

当然可以,您需要做的就是使ImageView具有相同的id名称,然后您始终可以使用相同的int id访问它们。

加载新布局后,不要忘记重新启动它们。

答案 1 :(得分:1)

尝试这样的事情

 int resA = getResources().getIdentifier("your image view", "your layout", getPackageName());
希望这有帮助..

答案 2 :(得分:1)

除了您感兴趣的每个RelativeLayout之外,ImageView内是否有任何观点?如果没有,只需使用布局上的getChildCount()getChildAt()方法来获取所需的视图。任何ViewGroup已将其子项存储在数组中,因此如果这些是包含在其中的唯一视图,则没有理由复制该行为:

//Somewhere in your code get a reference to the layout
RelativeLayout layout = (RelativeLayout)findViewById(R.id.relativeLayout1);

//Then, update your view selection line like so
**View v = layout.getChildAt(generator.nextInt(layout.getChildCount()));**

HTH