2011-04-24 40 views
0

所以基本上我想這允許用戶輸入文本(他們的名字)。然後單擊提交按鈕,將該名稱存儲到數組中,並刪除EditText中的文字(以及爲玩家制作計數器)。在他們完成提交球員名稱後,我希望他們能夠點擊播放按鈕(標題爲「我相信我完成了」),然後繼續到下一頁,併發送所有信息。EditText和使用按鈕提交它們

我現在的問題是當我輸入一個名稱,然後單擊提交它強制關閉。如果我點擊播放按鈕強制關閉。想你可以幫我嗎?由於

第1類:

public class Class1 extends Activity 
{ 
int players=0; 
String names[]; 

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.class1); 

    final EditText input = (EditText) findViewById(R.id.nameinput); 


    Button submitButton = (Button) findViewById(R.id.submit_btn); 
    submitButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View submit1) 
     { 
      players++; 
      for(int i=0; i < players; i++) 
      { 
       names[i] = input.getText().toString(); 
       input.setText(""); 
      } 
     } 
    }); 

    Button doneButton = (Button) findViewById(R.id.done_btn); 
    doneButton.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View done1) 
     { 
      Intent done = new Intent(Class1.this, Class2.class); 
      done.putExtra("players", players); 
      done.putExtra("names", names[players]); 
      startActivity(done); 
     } 
    }); 
} 

回答

1

您沒有爲任何地方的變量names分配。如果你不知道NO_OF_PLAYERS

names = new String[NO_OF_PLAYERS]; 

,然後用

ArrayList<String> names = new ArrayList<String>(); 

,並使用它:你應該這樣做

names.add(input.getText().toString()); 
+0

好了,所以我給你試駕。提交按鈕的工作原理據我所知。我留下的唯一問題是當我點擊播放按鈕時。這就是那個按鈕的樣子。 – steven 2011-04-24 16:35:23

+0

'code'Button doneButton =(Button)findViewById(R.id.done_btn); doneButton.setOnClickListener(新View.OnClickListener() { 公共無效的onClick(查看DONE1) { \t意圖做=新意圖(TokerGame.this,Game.class); \t捆綁捆=新軟件包(); \t bundle.putStringArrayList(「arrayKey」,names); \t完成。putExtra(「球員」,球員); \t //done.putExtra("names「,names [players]); \t startActivity(done); } });' – steven 2011-04-24 16:36:09

0

我不知道這可能是原因,但需要注意:

提交按鈕的onclick的方法:

public void onClick(View submit1) 
    { 
     players++; 
     for(int i=0; i < players; i++) 
     { 
      names[i] = input.getText().toString(); 
      input.setText(""); 
     } 
    } 

在這裏,你增加players計數器。然後從0循環到玩家計數器。在循環中,您可以在名稱數組中分配輸入文本。最後你清除輸入。

這不是正確的做法。您尚未初始化名稱數組。你也不應該每次都循環。它將覆蓋names數組中的舊值。下次在循環中,input.getText()將返回空白,因爲您在第一次輸入循環時已經從輸入中刪除了文本。

應該

public void onClick(View submit1) 
{ 
    names[players++] = input.getText().toString(); 
    input.setText(""); 
} 

如果您調試代碼,你會更好地明白我想說什麼。

0

你的程序崩潰,因爲你想訪問非初始化數組。您必須使用String names[] = new String[MAX_COUNT]創建數組對象。

0

請試試這個編輯代碼,

public class Class1 extends Activity 
    { 
    static int players; 
    static String names[]; 
    static //this is called once when class is first time used. 
    { 
    players=-1; 
    } 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.class1); 

     final EditText input = (EditText) findViewById(R.id.nameinput); 


     Button submitButton = (Button) findViewById(R.id.submit_btn); 
     submitButton.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View submit1) 
      { 
       players++; 
       names[players] = input.getText().toString(); 
       input.setText(""); 
      } 
     }); 

     Button doneButton = (Button) findViewById(R.id.done_btn); 
     doneButton.setOnClickListener(new View.OnClickListener() 
     { 
      public void onClick(View done1) 
      { 
       Intent done = new Intent(Class1.this, Class2.class); 
       done.putExtra("players", players); 
       done.putExtra("names", names[players]); 
       startActivity(done); 
      } 
     }); 
    }