簡體   English   中英

如何更改按鈕的onClick()行為?

[英]How Do I Change the onClick() Behavior of a Button?

我真的不確定這個問題在哪里,因為我不一定知道它的可能性。 我對Android Studio和總體編碼還是有些陌生,但是我知道這很危險(也許這是我的問題-對於初學者來說我可能覺得太誇張了),但這就是我想要做的。

我有一個帶有多個按鈕的單頁應用程序。 我正在創建一個應用程序,該應用程序本質上是NFL游戲的得分計數器,而我選擇計分方法的部分如下所示:

截圖

上一節是一個水平式LinearLayout,每側有2個嵌套的LinearLayout,用於4個評分按鈕。 垂直切換按鈕已被設置為將底部按鈕上的文本從Fieldgoal更改為Safety,反之亦然,具體取決於每一側切換的是非。

teamOneToggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            if (isChecked) {
                teamTwoToggleButton.setChecked(false);
                teamOneSafety.setText("SAFETY");
                teamTwoSafety.setText("FIELDGOAL");
            } else {
                teamTwoToggleButton.setChecked(true);
                teamTwoSafety.setText("SAFETY");
                teamOneSafety.setText("FIELDGOAL");
            }            }        });

我已經弄清楚了那部分,但是由於安全性得分為2分,而實地目標得分為3分,因此我需要能夠更改onClick行為。

我希望有一個Java函數可以讓我設置一個新的onClick活動,就像我可以setText,setColor,setAlignment,set(whatever)一樣,但是找不到任何東西。

我也嘗試過根據按鈕本身的.getText()定義字符串,但是我的應用程序每次都崩潰。

如果有人有任何想法,我的完整代碼在我的Github上

如果我理解您的問題,您想更改OnClickListener。

當前,您在XML中定義它:

android:onClick="touchdownClickTeamOne" //This is not recommended practice, now you know.

您應該改為在Java代碼中執行此操作:

Button teamOneTouchDown = findViewById(R.id.team_one_off_td);
teamOneTouchDown.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // Do stuff
    }
});

現在,您知道如何重新定義任何按鈕的OnClickListener。


我不確定如何以某種方式設置它,以便在按鈕顯示“安全”時以編程方式執行“ this”,在按鈕顯示“ Fieldgoal”時執行“ that”。

當前,您使用此方法:

public void fieldgoalClickTeamOne (View v) {
    scoreTeamOne = scoreTeamOne + 3;
    displayForTeamOne(scoreTeamOne);
}

我們知道View v是一個Button,而Buttons是TextViews,所以讓我們檢查一下文本:

public void fieldgoalClickTeamOne (View v) {
    TextView textView = (TextView) v; // Could cast to Button, makes no difference here
    if (textView.getText().toString().equals("SAFETY") {
        // Do this
    } else {
        // Do that
    }
}

PS我很高興看到初學者遵循編碼約定,您的代碼非常易於閱讀。 我有幾點建議。

首先,您應該花一點時間來了解ifelse ifelse之間的區別。 您的AdapterView應該僅具有on if語句,而else if許多else if

其次,您應該花一些時間來學習通用編碼實踐和/或可重用性(這個概念有些棘手)。 回到您的AdapterViews,您只需要一個OnItemSelectedListener:

OnItemSelectedListener onItemSelectedListener = new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        final ImageView imageView;
        if (adapterView.getId() == R.id.teamOneSpinner) 
            imageView = (ImageView) findViewById(R.id.team_one_spinner_team_logo);
        else
            imageView = (ImageView) findViewById(R.id.team_two_spinner_team_logo);

        String s=((TextView)view).getText().toString();
        if(s.equals("Arizona Cardinals"))
            imageView.setImageResource(R.drawable.arizona_cardinals);
        else if(s.equals("Atlanta Falcons"))
            imageView.setImageResource(R.drawable.atlanta_falcons));
        else if(s.equals("Baltimore Ravens")) 
            //etc, etc

中提琴,多個旋轉器的聆聽者。 設置如下:

teamOneSpinner.setOnItemSelectedListener(onItemSelectedListener);
teamTwoSpinner.setOnItemSelectedListener(onItemSelectedListener);

看看我為您節省了多少寫作! 您的許多方法都是重復性的,您可以使用這些技術刪除80%的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM