2012-02-24 80 views
0

我想在我的ObjectsClass中的level1.xml中獲取我的imageviews的id,並且我已經在GamePlayActivity中誇大了這個佈局...我的ObjectClass不是活動,那麼如何獲取該類中的id數組...這裏是我level.xml說,有15 ImageView的我已經展示幾個....如何在int數組中獲得R.id's?

 <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; 

     } 
} 

和對象類

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個對象,所以在我的級別開始之前,即在我膨脹在我的gameplayActivity之前,我看到上面我想要隨機8點擊,反之亦然...

此外,它應該適用於所有級別...現在我有一個level1.xml如何實現它的所有級別...我需要給同一個ID的所有佈局的圖像視圖?

回答

1

當然你可以,所有你需要做的是使ImageView具有相同的ID名稱,然後你可以隨時使用相同的int ID訪問它們。

不要忘記在加載新佈局後重新初始化它們。

+0

耶,但我應該如何在陣列 檢索imageIds看過來ObectId [I] = R.id.imageview [I];這會工作嗎? – user1201239 2012-02-24 05:21:44

+0

不,你應該是ImageView imgview = currentLayout.findViewById(R.id.imageview1); – Cytown 2012-02-24 11:22:55

1

嘗試這樣

int resA = getResources().getIdentifier("your image view", "your layout", getPackageName()); 

希望這有助於一些事情..

+0

這將給我從我的layout.xml的imageview ID數組? – user1201239 2012-02-24 09:21:40

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

+0

不存在除了Imageview之外的相對佈局中的視圖,但現在一個問題是,我將如何獲得findViewId工作,因爲我沒有在我的Objects類中擴展任何視圖? – user1201239 2012-02-24 06:31:55

+0

將佈局引用傳遞給對象類而不是「Context」。據我所知,你不需要在該類中使用'findViewById'或'Context'。 – Devunwired 2012-02-24 18:05:01