2016-02-12 130 views
0

因此,我正在創建一個應用程序,並且一直困擾着我的一件小事情是,我必須單擊按鈕兩次才能使其工作。必須單擊按鈕兩次才能在Android Studio中工作

這是我的代碼,我看不出它什麼毛病:

public void signUpButtonClickAction(View v){ 
    Button signUpButtonClick = (Button) findViewById(R.id.signUpButton); 
    signUpButtonClick.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, Signup.class)); 
     } 
    }); 
} 

XML代碼爲我的按鈕:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/signUps" 
    android:id="@+id/signUpButton" 
    android:layout_marginBottom="38dp" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:onClick="signUpButtonClickAction"/> 

這可能是一個小的修復,但即使我能」 t發現此錯誤

編輯:對不起,但爲什麼我的問題是「倒票」?這是一個真正的問題,很容易被混淆或難以理解的人誰是新的Android開發...

回答

2

解決方案

刪除線android:onClick="signUpButtonClickAction"並添加

Button signUpButtonClick = (Button) findViewById(R.id.signUpButton); 
signUpButtonClick.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(MainActivity.this, Signup.class)); 
    } 
}); 

到您的活動的onCreate方法或您的片段的onCreateView方法。

替代解決方案

可替換地,代碼改變此

public void signUpButtonClickAction(View v) { 
    startActivity(new Intent(MainActivity.this, Signup.class)); 
} 

說明

在XML中線android:onClick="signUpButtonClickAction"是造成signUpButtonClick.setOnClickListener內部()調用,所以你不必再次在signUpButtonClickAction中設置onClickListener。

初始化多個按鈕

private void initializeButtons() { 
    Button signUpButtonClick = (Button) findViewById(R.id.signUpButton); 
    signUpButtonClick.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      startActivity(new Intent(MainActivity.this, Signup.class)); 
     } 
    }); 

    Button anotherButton = (Button) findViewById(R.id.anotherButton); 
    anotherButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("TAG", "Clicked on another button!"); 
     } 
    }); 
} 

現在只需撥打initializeButtons()從活動的onCreate方法。

+0

嗨,你爲什麼刪除'onClickListener'?我認爲它可行,但現在我很困惑,爲什麼沒有聽衆:/ –

+0

你在做什麼是在第一次點擊按鈕時設置一個新的onClickListener。如果您在xml中使用'android:onClick =「signUpButtonClickAction」',則Android已將onClickListener內部設置爲您指定的方法 - signUpButtonClickAction。 – marktani

+0

@SamuelGeorgeszusz一個監聽器由框架設置,並調用你在'android:onClick'中提到的方法。 –

1

問題是,您設置了兩次onClick操作。在你的xml代碼中,你只需要在你的按鈕上設置一個onClick(),你不需要在signUpButtonClickAction(View v)中設置setOnClickListener()。你有兩個選擇:

離開xml文件就像是和裏面signUpButtonClickAction(View v)做:

public void signUpButtonClickAction(View v){ 
    startActivity(new Intent(MainActivity.this, Signup.class)); 
} 

OR

刪除XML文件的onclick:

<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="@string/signUps" 
android:id="@+id/signUpButton" 
android:layout_marginBottom="38dp" 
android:layout_alignParentBottom="true" 
android:layout_centerHorizontal="true" 
/> 

並在您的活動中執行此操作:

Button yourButton = (Button) findViewById(R.id.signUpButton); 
yourButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(MainActivity.this, Signup.class)); 
    } 
}); 
+0

謝謝你回答我的問題。因爲我已經接受了以前的答案,所以我仍然會提高您的答案。出於興趣,如何編程一個按鈕,以便詢問用戶他們是否還想回去? –

+0

我不確定我是否理解你的問題,無論你想在按下按鈕時執行什麼操作,都必須在onClick()中寫入它。這將取決於你想要做什麼,但作爲一個例子,你可以創建一個可見性爲'View.GONE'的LinearLayout,當你點擊按鈕時,你將LinearLayout的可見性改爲'View.VISIBLE '包含兩個按鈕,一個用於返回,另一個用於移動到下一個活動, – Spirrow

0

原因的問題是:onclick()onClickListener字面上是一樣的!而且你正在實施這兩個,最終的結果是你需要按兩次按鈕才能開始活動!

FIX:

你的問題的解決方案是:

1:

public void signUpButtonClickAction(View v) 
{ 
    startActivity(new Intent(MainActivity.this, Signup.class)); 
} 

2:

Button signUpButtonClick = (Button) findViewById(R.id.signUpButton); 
signUpButtonClick.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     startActivity(new Intent(MainActivity.this, Signup.class)); 
    } 
}); 
0

作爲mcwise所述 機器人:的onClick = 「signUpButtonClickAction」 和 signUpButtonClick.setOnClickListener(新View.OnClickListener(){ @Override 公共無效的onClick(視圖v){ startActivity(new Intent(MainActivity.this,Signup.class)); } }); 做同樣的事情。所以你必須去與其中一個。有兩個是造成問題

相關問題