2015-07-11 66 views
0

我正在創建一個包含100個活動的應用程序。每個活動有10個問題,用戶猜測正確的答案。這是很多編碼。我怎樣才能讓編碼變得簡單 - 使用數組,重構還是我不知道的一些設計模式?看到我的代碼如下。創建一個字符串數組以隨機調用多個活動

每個活動都很相似,但有不同的問題和答案。

任何幫助,將不勝感激。

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(); 
} 
+1

爲什麼不做一個單獨的活動,並加載問題? – AterLux

回答

0

可以使用的Class.forName()方法,這樣的onClick方法能夠改寫這樣的:

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 
} 

但是,如果你有相同的用戶界面,100個活動的功能,我建議你只使用1活動,但通過意向發送差異數據。

+0

嗨Minhdth,謝謝。這很好。至於使用1活動,但通過意圖發送不同的數據,因爲我是一個自學者,我還沒有學會這個功能。因此我打算使用100項活動。我知道必須有更好的辦法。如果你知道一個資源來學習這個功能,請告訴我。再次感謝你的幫助。 – user3055624

+0

@ user3055624,對於簡單的傳遞數據,你可以按照這個鏈接http://stackoverflow.com/questions/19286970/using-intents-to-pass-data-between-activities-in-android 如果你的數據對象不是主要類型,您應該實現http://developer.android.com/reference/android/os/Parcelable.html或http://developer.android.com/reference/java/io/Serializable.html – Minhtdh

+0

Thx Minhtdh。我會看看。 – user3055624