0

I'm creating an app which will consist of 100 activities. There is 10 questions for each activity and the user guesses the right answer. That's a lot of coding. How can I make the coding simple - using arrays, refactoring or some design pattern I'm not aware of? See my code below.

Each activity is similar but there are different questions and answers.

Any help would be appreciated.

private TextView whoami3;
private TextView isa1,isa2,isa3,isa4,isa5,isa6,isa7,isa8,isa9,isa10;
private Button myclick;
private EditText answer;
private TextView mycorrect;
private TextView mytryagain;
private Button next_button;

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

    whoami3 = (TextView) findViewById(R.id.whoami3);
    isa1 = (TextView) findViewById(R.id.isa1);
    isa2 = (TextView) findViewById(R.id.isa2);
    isa3 = (TextView) findViewById(R.id.isa3);
    isa4 = (TextView) findViewById(R.id.isa4);
    isa5 = (TextView) findViewById(R.id.isa5);
    isa6 = (TextView) findViewById(R.id.isa6);
    isa7 = (TextView) findViewById(R.id.isa7);
    isa8 = (TextView) findViewById(R.id.isa8);
    isa9 = (TextView) findViewById(R.id.isa9);
    isa10 = (TextView) findViewById(R.id.isa10);
    myclick = (Button) findViewById(R.id.myclick);
    answer = (EditText) findViewById(R.id.answer);
    mycorrect = (TextView) findViewById(R.id.mycorrect);
    mytryagain = (TextView) findViewById(R.id.mytryagain);
    next_button = (Button) findViewById(R.id.next_button);



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

            TextView whoami3 = (TextView) findViewById(R.id.whoami3);
            TextView isa1 = (TextView) findViewById(R.id.isa1);
            TextView isa2 = (TextView) findViewById(R.id.isa2);
            TextView isa3 = (TextView) findViewById(R.id.isa3);
            TextView isa4 = (TextView) findViewById(R.id.isa4);
            TextView isa5 = (TextView) findViewById(R.id.isa5);
            TextView isa6 = (TextView) findViewById(R.id.isa6);
            TextView isa7 = (TextView) findViewById(R.id.isa7);
            TextView isa8 = (TextView) findViewById(R.id.isa8);
            TextView isa9 = (TextView) findViewById(R.id.isa9);
            TextView isa10 = (TextView) findViewById(R.id.isa10);
            Button ansewer = (Button) findViewById(R.id.myclick);
            TextView mycorrect = (TextView) findViewById(R.id.mycorrect);
            TextView mytryagain = (TextView) findViewById(R.id.mytryagain);

            if (whoami3.isShown()) {
                whoami3.setVisibility(View.INVISIBLE);
                isa1.setVisibility(View.VISIBLE);
            } else {
                whoami3.setVisibility(View.VISIBLE);
            }
        }
    });


    isa1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa1.isShown()) {
                isa1.setVisibility(View.INVISIBLE);
                isa2.setVisibility(View.VISIBLE);

            } else {
                isa1.setVisibility(View.VISIBLE);
            }
        }
    });

    isa2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa2.isShown()) {
                isa2.setVisibility(View.INVISIBLE);
                isa3.setVisibility(View.VISIBLE);

            } else {
                isa2.setVisibility(View.VISIBLE);
            }
        }
    });

    isa3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa3.isShown()) {
                isa3.setVisibility(View.INVISIBLE);
                isa4.setVisibility(View.VISIBLE);

            } else {
                isa3.setVisibility(View.VISIBLE);
            }
        }
    });

    isa4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa4.isShown()) {
                isa4.setVisibility(View.INVISIBLE);
                isa5.setVisibility(View.VISIBLE);

            } else {
                isa4.setVisibility(View.VISIBLE);
            }
        }
    });

    isa5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa5.isShown()) {
                isa5.setVisibility(View.INVISIBLE);
                isa6.setVisibility(View.VISIBLE);

            } else {
                isa5.setVisibility(View.VISIBLE);
            }
        }
    });

    isa6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa6.isShown()) {
                isa6.setVisibility(View.INVISIBLE);
                isa7.setVisibility(View.VISIBLE);

            } else {
                isa6.setVisibility(View.VISIBLE);
            }
        }
    });

    isa7.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa7.isShown()) {
                isa7.setVisibility(View.INVISIBLE);
                isa8.setVisibility(View.VISIBLE);

            } else {
                isa7.setVisibility(View.VISIBLE);
            }
        }
    });

    isa8.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa8.isShown()) {
                isa8.setVisibility(View.INVISIBLE);
                isa9.setVisibility(View.VISIBLE);

            } else {
                isa8.setVisibility(View.VISIBLE);
            }
        }
    });

    isa9.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isa9.isShown()) {
                isa9.setVisibility(View.INVISIBLE);
                isa10.setVisibility(View.VISIBLE);

            } else {
                isa9.setVisibility(View.VISIBLE);
            }
        }
    });

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

            String yourString = "ISAIAH";

            if (answer.getText().toString().trim().toLowerCase().equals("ISAIAH".toString().trim().toLowerCase())) {
                mycorrect.setVisibility(View.VISIBLE);
            } else {

                mytryagain.setVisibility(View.VISIBLE);

                if (answer.getText().toString().trim().toLowerCase()!=("MARK".toString().trim().toLowerCase())) {
                    answer.setText("");
                }

            }
            mytryagain.setText("Sorry, Try again");
            mytryagain.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mytryagain.setVisibility(View.INVISIBLE);
                }
            }, 2000);
        }


    });

}
public void onClick(View view){
    Random rnd = new Random();
    int x=rnd.nextInt(4)+1;
    Intent intent = new Intent();

    switch (x){
        case 1:
            intent.setClass(this,John.class);
            break;
        case 2:
            intent.setClass(this,Caleb.class);
            break;
        case 3:
            intent.setClass(this,Mark.class);
            break;
        case 4:
            intent.setClass(this,Jacob.class);
            break;
    }
    startActivity(intent);
    finish();
}
kguest
  • 3,804
  • 3
  • 29
  • 31

1 Answers1

0

You can use Class.forName() method, so onClick method can rewrite like this:

Random rnd = new Random();
int x=rnd.nextInt(4);
String[] clazzes = {John.class.getName(), Caleb.class.getName(), Mark.class.getName(), Jacob.class.getName()};
Intent intent = new Intent();
try {
intent.setClass(this, Class.forName(clazzes[x]));

startActivity(intent);
finish();
} catch (Exception e) {  
// your exception here when class not found here
}

But if you have same UI, functions for 100 activities, I suggest you use only 1 activity but send the difference datas via Intent.

justHooman
  • 3,044
  • 2
  • 17
  • 15
  • Hey Minhdth, thanks. This works great. As far as using 1 activity but sending the different data via intent, since I am a self learner i haven't learned that function yet. Thus I was going to use 100 activities. I knew there must be a better way. If you know of a resource to learn that function please inform me. Thanks again for your help. – user3055624 Jul 12 '15 at 03:48
  • @user3055624, for simple pass data, you can follow this link http://stackoverflow.com/questions/19286970/using-intents-to-pass-data-between-activities-in-android If your data object is not primary type, you should implement http://developer.android.com/reference/android/os/Parcelable.html or http://developer.android.com/reference/java/io/Serializable.html – justHooman Jul 13 '15 at 02:03
  • Thx Minhtdh. I will check it out. – user3055624 Jul 13 '15 at 02:59