как получить R.id в массиве int? - PullRequest
0 голосов
/ 24 февраля 2012

Я хочу получить идентификаторы моих изображений в моем ObjectsClass, которые находятся в level1.xml, и я накачал этот макет в GamePlayActivity ... МОЙ ObjectClass - это не действие, как получить массив идентификаторов в этом классе ...вот мой 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, как добиться этого для всех уровней ... нужно ли мнедать одинаковые идентификаторы изображения во всем макете?

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

попробуйте что-нибудь подобное

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

надеюсь, что это поможет ..

1 голос
/ 24 февраля 2012

Есть ли какие-либо представления внутри этого 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()));**

НТН

1 голос
/ 24 февраля 2012

Конечно, вы можете, все, что вам нужно сделать, это сделать ImageView с тем же именем идентификатора, тогда вы всегда можете получить к ним доступ с одним и тем же int id.

Не забудьте повторно запустить их послезагрузить новый макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...