2015-04-11 3 views
1

У меня есть 5 видов деятельности. Я хочу, чтобы открыть случайные действия, когда нажата кнопка «Пуск» на MainMenu.Открытые случайные действия при нажатии кнопки

Для примера: Активность 1 -> Деятельность 4 -> Активность 3

Я попытался коды размещены here и here, но ни один из них не работал.

Это мой код в Start Button

\t \t gotoMenu=(Button)findViewById(R.id.btnStart); 
 
\t \t gotoMenu.setOnClickListener(new OnClickListener() { 
 
\t \t \t @Override 
 
\t \t \t public void onClick(View arg0) { 
 
\t \t \t \t // TODO Auto-generated method stub 
 
\t \t \t \t startActivity(new Intent(MainMenu.this, Menu_WelcomeLuzon.class)); 
 
\t \t \t \t overridePendingTransition(R.animator.transition_fade_in, R.animator.transition_fade_out); 
 
    
 
\t \t \t } 
 
\t \t });

Все фрагменты кода будет большая помощь. Заранее спасибо!

ответ

4

Для того чтобы начать деятельность, вам необходимо использовать намерения. И вы можете назвать это, когда кнопка нажата так:

Button myButton = (Button) findViewById(R.id.MY_BUTTON); 
myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(CurrentActivity.class, NextActivity.class); 
     startActivity(intent); 
    } 

Чтобы сделать это случайно, мы должны изменить его немного, так это больше похоже на это:

Button myButton = (Button) findViewById(R.id.MY_BUTTON); 
myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // Here, we are generating a random number 
     Random generator = new Random(); 
     int number = generator.nextInt(5) + 1; 
     // The '5' is the number of activities 

     Class activity = null; 

     // Here, we are checking to see what the output of the random was 
     switch(number) { 
      case 1: 
       // E.g., if the output is 1, the activity we will open is ActivityOne.class 
       activity = ActivityOne.class; 
       break; 
      case 2: 
       activity = ActivityTwo.class; 
       break; 
      case 3: 
       activity = ActivityThree.class; 
       break; 
      case 4: 
       activity = ActivityFour.class; 
       break; 
      default: 
       activity = ActivityFive.class; 
       break; 
     } 
     // We use intents to start activities 
     Intent intent = new Intent(getBaseContext(), activity); 
     startActivity(intent); 
    } 
} 

Вы можете прочитать больше о начиная деятельность и используя намерения here если хотите.

Обновленный ответ на обновленный вопрос/комментарий:

Если вы не хотите, чтобы открыть активность, которая уже была открыта, это будет немного сложнее.

В вашей основной деятельности добавить код ниже (это почти такой же, как тот, в предыдущем ответе, но немного по-другому):

Button myButton = (Button) findViewById(R.id.MY_BUTTON); 
myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // We are creating a list, which will store the activities that haven't been opened yet 
     ArrayList<Class> activityList = new ArrayList<>(); 
     activityList.add(ActivityOne.class); 
     activityList.add(ActivityTwo.class); 
     activityList.add(ActivityThree.class); 
     activityList.add(ActivityFour.class); 
     activityList.add(ActivityFive.class); 

     Random generator = new Random(); 
     int number = generator.nextInt(5) + 1; 

     Class activity = null; 

     // Here, we are checking to see what the output of the random was 
     switch(number) { 
      case 1: 
       activity = ActivityOne.class; 
       // We are adding the number of the activity to the list 
       activityList.remove(ActivityOne.class); 
       break; 
      case 2: 
       activity = ActivityTwo.class; 
       activityList.remove(ActivityTwo.class); 
       break; 
      case 3: 
       activity = ActivityThree.class; 
       activityList.remove(ActivityThree.class); 
       break; 
      case 4: 
       activity = ActivityFour.class; 
       activityList.remove(ActivityFour.class); 
       break; 
      default: 
       activity = ActivityFive.class; 
       activityList.remove(ActivityFive.class); 
       break; 
     } 
     // We use intents to start activities 
     Intent intent = new Intent(getBaseContext(), activity); 
     // `intent.putExtra(...)` is used to pass on extra information to the next activity 
     intent.putExtra("ACTIVITY_LIST", activityList); 
     startActivity(intent); 
    } 
} 

Во всех остальных 5 мероприятий, используйте код ниже:

Button myButton = (Button) findViewById(R.id.ANOTHER_BUTTON); 
myButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ArrayList<Class> activityList = new ArrayList<>(); 
     Bundle extras = getBaseContext().getIntent().getExtras(); 
     activityList = extras.get("ACTIVITY_LIST"); 

     if(activityList.size() == 0) { 
      // Do something when after all activities have been opened 
      doSomeAction(); 
     } else { 
      // Now, the random number is generated between 1 and however many 
      // activities we have remaining 
      Random generator = new Random(); 
      int number = generator.nextInt(activityList.size()) + 1; 

      Class activity = null; 

      // Here, we are checking to see what the output of the random was 
      switch(number) { 
       case 1: 
        // We will open the first remaining activity of the list 
        activity = activityList.get(0); 
        // We will now remove that activity from the list 
        activityList.remove(0); 
        break; 
       case 2: 
        // We will open the second remaining activity of the list 
        activity = activityList.get(1); 
        activityList.remove(1); 
        break; 
       case 3: 
        // We will open the third remaining activity of the list 
        activity = activityList.get(2); 
        activityList.remove(2); 
        break; 
       case 4: 
        // We will open the fourth remaining activity of the list 
        activity = activityList.get(3); 
        activityList.remove(3); 
        break; 
       default: 
        // We will open the fifth remaining activity of the list 
        activity = activityList.get(4); 
        activityList.remove(4); 
        break; 
      } 

      // Note: in the above, we might not have 3 remaining activities, for example, 
      // but it doesn't matter because that case wouldn't be called anyway, 
      // as we have already decided that the number would be between 1 and the number of 
      // activities left. 


      // Starting the activity, and passing on the remaining number of activities 
      // to the next one that is opened 
      Intent intent = new Intent(getBaseContext(), activity); 
      intent.putExtra("ACTIVITY_LIST", activityList); 
      startActivity(intent); 
     } 
    } 
} 
1

@Farbod Саламат-заде ваше решение является большим, за исключением той части

Bundle extras = getBaseContext().getIntent().getExtras(); 

приведет к ошибке в Android Studio 2.1. Это должно быть

Bundle extras = getIntent().getExtras(); 
+0

Привет, Артем, просто наткнулся на ваш ответ. Фактически, версия Android Studio, которую вы запускаете, не должна влиять на используемый вами код - она ​​должна быть одинаковой независимо. Однако код будет отличаться, в зависимости от того, где вы его используете. Если он находится в 'Activity', это будет' getIntent(). GetExtras() '; если в «Фрагменте» нам нужно 'getActivity()' перед этим. Это связано с тем, что метод ['getIntent()' является частью класса 'Activity'] (https://developer.android.com/reference/android/app/Activity.html#getIntent()). –

Смежные вопросы