【问题标题】:Stop previous random activity from showing停止显示以前的随机活动
【发布时间】:2016-05-22 02:12:03
【问题描述】:

有谁知道如何完全阻止随机活动的显示?我有 5 节课,每节课 10 道题。一旦给出正确答案,我想继续下一个随机课程,而不是让上一个课程再次出现。一旦第一次回答了所有随机类,那么 Random 方法就结束了。我试过完成(),但这不起作用。在按钮单击后,我仍然会得到重复的课程。请查看我的代码并建议您是否可以。谢谢

公共类 HomeActivity 扩展 AppCompatActivity {

TextView myTv;
Button nextBtn;
EditText myEt;
Button playgameBtn;

int mCounter = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    myTv = (TextView) findViewById(R.id.myTv);
    nextBtn = (Button) findViewById(R.id.nextBtn);
    playgameBtn = (Button) findViewById(R.id.playgameBtn);
    myEt = (EditText) findViewById(R.id.myEt);


   final String[] clazzes = new String[] {"Mark.class", "John.class", "Caleb.class", "Isaiah.class", "Jacob.class"};


    playgameBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ArrayList<Class> activityList = new ArrayList<>();
            activityList.add(Mark.class);
            activityList.add(John.class);
            activityList.add(Caleb.class);
            activityList.add(Isaiah.class);
            activityList.add(Jacob.class);


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

            Class activity = null;

            switch (number){
                case 1:
                    activity = John.class;
                    break;
                case 2:
                    activity = Caleb.class;
                    break;
                case 3:
                    activity = Mark.class;
                    break;
                case 4:
                    activity = Isaiah.class;
                    break;
                default:
                    activity = Jacob.class;
                    break;


            }
            Intent intent = new Intent(getBaseContext(), activity);



             startActivity(intent);
            finish();

            }

private void finish() {
}


    });


      }



  }

【问题讨论】:

  • 您是否考虑过使用片段并保存问卷过程?
  • 不,不确定如何处理片段。

标签: java android random


【解决方案1】:

这不是编程的好方法。您的解决方案可以是:从代码中删除那个空的完成功能。

public class HomeActivity extends AppCompatActivity {
TextView myTv;
Button nextBtn;
EditText myEt;
Button playgameBtn;

int mCounter = 0;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

myTv = (TextView) findViewById(R.id.myTv);
nextBtn = (Button) findViewById(R.id.nextBtn);
playgameBtn = (Button) findViewById(R.id.playgameBtn);
myEt = (EditText) findViewById(R.id.myEt);


final String[] clazzes = new String[] {"Mark.class", "John.class", "Caleb.class", "Isaiah.class", "Jacob.class"};
playgameBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        ArrayList<Class> activityList = new ArrayList<>();
        activityList.add(Mark.class);
        activityList.add(John.class);
        activityList.add(Caleb.class);
        activityList.add(Isaiah.class);
        activityList.add(Jacob.class);


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

        Class activity = null;

        switch (number){
            case 1:
                activity = John.class;
                break;
            case 2:
                activity = Caleb.class;
                break;
            case 3:
                activity = Mark.class;
                break;
            case 4:
                activity = Isaiah.class;
                break;
            default:
                activity = Jacob.class;
                break;


        }
        Intent intent = new Intent(getBaseContext(), activity);



         startActivity(intent);
        finish();

        }

});


  }



}

【讨论】:

    【解决方案2】:

    一种方法是使用Collections.shuffle() 来随机化项目,然后在调用活动后“弹出”列表的最后一项。

            ArrayList<Class> activityList = new ArrayList<>();
            activityList.add(Mark.class);
            activityList.add(John.class);
            activityList.add(Caleb.class);
            activityList.add(Isaiah.class);
            activityList.add(Jacob.class);
            Collections.shuffle(activityList);
    
         playgameBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    
    
           Intent intent = new Intent(getBaseContext(), activityList.get(0));
            startActivity(intent);
            activityList.remove(0);
    
            }
    
            [...]
    

    请记住,您应该将对象添加到 setOnClickListener 方法之外的 ArrayList 中

    【讨论】:

    • 我忘了说,不要调用finish()。并删除空的完成功能,就像其他用户建议的那样。
    【解决方案3】:

    由于您不想使用通常执行此类操作的推荐方式片段,因此我会在您已经提供的内容之外再给您一个非常基本的示例。

    //make a list as an instance variable
    private static List<Integer> displayedClasses;
    
    //In your onClick event get the random number as follows
    int number=getRandomNumber();
    //getRandomNumber() will return -1 if all classes are displayed. Handle it here.
    if(number==-1){
       displayedClasses.clear();
       //do something else
       return;
    }
    //store the number in the above list
    if(displayedClasses==null)displayedClasses=new ArrayList<>();
    displayedClasses.add(new Integer(number));
    
    //continue with the rest of the statement
    

    获取随机数方法

    private int getRandomNumber(){
        if(l.size()>=5) {
           return -1;
        }
        Random random=new Random();
        int num=0;
        while(l.contains(num)){
            num=random.nextInt(5)*1;
        }
        return num;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 2019-08-17
      • 2020-04-30
      • 2023-01-19
      • 2012-03-02
      • 1970-01-01
      相关资源
      最近更新 更多