RichFounders
RichFounders

Reputation: 169

How to make a Random Layout when button clicked

Actually i want to make it Random class but then i think to much activity can make the app slow so i just want to make Relative layout Random

so i have 5 layout in one activity class

layout1 = (RelativeLayout)findViewById(R.id.layout1);
layout2 = (RelativeLayout)findViewById(R.id.layout2);
layout3 = (RelativeLayout)findViewById(R.id.layout3);
layout4 = (RelativeLayout)findViewById(R.id.layout4);  
layout5 = (RelativeLayout)findViewById(R.id.layout5);

and in each layout there is the button in there to make layout random again

button.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v){ 

        //The code to how make layout random

        }
     });
 }

and then how to make layout that already opened not open again if the button random was pressed? then if all layout was already opened it will open new activity class

can anyone help me explain with give some example code of that?

Upvotes: 2

Views: 1917

Answers (3)

Mechanic
Mechanic

Reputation: 172

Make an array to store the layout indexes.

RelativeLayout[] layout = new RelativeLayout[5];
layout[0] = (RelativeLayout)findViewById(R.id.layout[0]); // 0
layout[1] = (RelativeLayout)findViewById(R.id.layout[1]); // 1
layout[2] = (RelativeLayout)findViewById(R.id.layout[2]); // 2
layout[3] = (RelativeLayout)findViewById(R.id.layout[3]); // 3
layout[4] = (RelativeLayout)findViewById(R.id.layout[4]); // 4

Make a simple random number generator.

public void FindNewLayout ()
{

  Random r_generator = new Random();

  int randomNum;

  //now the only way to know which layouts have been shown before, you 
  //need to store the indexes that have been used before, somewhere. 
  //I recommend using an array.

  // count, and the array below should be initialized somewhere else 
  //rather than inside the method so that only one instance of each is 
  //created, but for simplicity I'll just put their initialization here
  int static count = 0; 
  //I'll explain below what count does.

  // the log array that remembers each layout change
  boolean[] log = new boolean[5];

  do 
  {
    //select new random number
    randomNum = r_generator.nextInt((max - min) + 1) + min;
    //in this case max = 4, min = 0, so replace these values in the 
    //equation above

    // check the log to see if the number has appeared again
    if ( log[randomNum] == false )
    {
      //Great! it hasn't appeared before, so change layout
      log[randomNum] = true;
      layout[randomNum].setVisibility = true;
      count++; // increases step
      break; //stops while because an unused layout has been found
    }

  }while (count<5)
  //if the value of count is equal to 5 then every layout has been used 
  //before so the do-while code should not be run again

}// end method

And the above method should be called whenever you want to try to change layout.

Finally, you can use something like the Debugger.log("message"); statement to be printed on the console for debugging purposes if you want, in order to find out when the layout has changed.

Upvotes: 3

bilal
bilal

Reputation: 2383

Initially set visibility gone to all relative layouts and put all of them into View's ArrayList.

Get random number from 0 to List size.

Get View at random position and set its visibility to Visible and remove from ArrayList.

Do same thing until ArrayList is empty.

Create new activity when ArrayList is empty.

Code:

ArrayList<View> viewList=new ArrayList<>();
initLayouts(){
    layout1 = (RelativeLayout)findViewById(R.id.layout1);
    layout2 = (RelativeLayout)findViewById(R.id.layout2);
    layout3 = (RelativeLayout)findViewById(R.id.layout3);
    layout4 = (RelativeLayout)findViewById(R.id.layout4);
    layout5 = (RelativeLayout)findViewById(R.id.layout5);


    viewList.add(layout1);
    viewList.add(layout2);
    viewList.add(layout3);
    viewList.add(layout4);
    viewList.add(layout5);

    for(int i=0;i<viewList.size();i++){
        viewList.get(i).setVisibility(View.GONE);
    }

button.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v){
        loadRandomLayout();
    }
});
}
public loadRandomLayout(){
    if(viewList.size()>0) {
        Random r = new Random();
        int number = r.nextInt(viewList.size());
        viewList.get(number).setVisibility(View.VISIBLE);
        viewList.remove(number);
    }else{
        startActivity(new Intent(this,NewActivity.class));
    }
}

Upvotes: 4

Skizo-ozᴉʞS ツ
Skizo-ozᴉʞS ツ

Reputation: 20626

You could create random int as follows:

//To get a Random number 1-5 (I saw your RelativeLayouts and you've 5
Random rand = new Random();
int randomNum = rand.nextInt((5 - 1) + 1) + 1;

And then you could create a method to choose what to show :

public void ShowRelativeLayout(int rand){

 switch(rand){
  case 1:
    if (layout1.getVisibility() == View.VISIBLE) {
     //Do nothing cause it's visible
     break;
 } else {
     layout1.setVisibility(View.VISIBLE);
     break;

 }
 case 2:
 ..........

}

Upvotes: 3

Related Questions