2016-07-23 32 views
0

我想創建一個活動,其中有九個不同顏色的按鈕。我只希望按鈕隨意更改上面顯示的文本字符串,只有當它們與相應的顏色文本字符串一起按下時。但是,當我運行該應用程序時,只有綠色按鈕會更改文本字符串,並且即使當文本字符串顯示除綠色以外的顏色時,也會更改它。我在if-then-else代碼中做錯了什麼? (我還沒有完成其餘六個顏色按鈕的代碼。)非常感謝!如何使用按鈕和字符串創建擴展的if-then-else語句

package com.example.franco.sampleapp;

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.content.res.Resources; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Button; 
import java.lang.String; 
import java.util.Random; 


public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private static final Random r_generator = new Random(); 
    String textViewString; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     TextView tv = (TextView) findViewById(R.id.color_text); 

     Button green= (Button) findViewById(R.id.green_button); 
     green.setOnClickListener(this); 
     Button blue = (Button) findViewById(R.id.blue_button); 
     blue.setOnClickListener(this); 
     Button red = (Button) findViewById(R.id.red_button); 
     red.setOnClickListener(this); 
     Button yellow= (Button) findViewById(R.id.yellow_button); 
     yellow.setOnClickListener(this); 
     Button white = (Button) findViewById(R.id.white_button); 
     white.setOnClickListener(this); 
     Button orange = (Button) findViewById(R.id.orange_button); 
     orange.setOnClickListener(this); 
     Button brown= (Button) findViewById(R.id.brown_button); 
     brown.setOnClickListener(this); 
     Button pink = (Button) findViewById(R.id.pink_button); 
     pink.setOnClickListener(this); 
     Button purple = (Button) findViewById(R.id.purple_button); 
     purple.setOnClickListener(this); 
     textViewString = tv.getText().toString(); 

    } 

    @Override 
    public void onClick(View v) { 

     if (v.getId() == R.id.green_button && textViewString.equals("Green")) { 

      Resources res = getResources(); 
      String[] myString = res.getStringArray(R.array.colorArray); 
      String q = myString[r_generator.nextInt(myString.length)]; 
      TextView tv = (TextView) findViewById(R.id.color_text); 
      tv.setText(q); 

     } else if (v.getId() == R.id.blue_button && textViewString.equals("Blue")) { 

      Resources res = getResources(); 
      String[] myString = res.getStringArray(R.array.colorArray); 
      String q = myString[r_generator.nextInt(myString.length)]; 
      TextView tv = (TextView) findViewById(R.id.color_text); 
      tv.setText(q); 

     } else if (v.getId() == R.id.red_button && textViewString.equals("Red")){ 

      Resources res = getResources(); 
      String[] myString = res.getStringArray(R.array.colorArray); 
      String q = myString[r_generator.nextInt(myString.length)]; 
      TextView tv = (TextView) findViewById(R.id.color_text); 
      tv.setText(q); 

     } 
    } 

    } 
+0

爲什麼不使用'switch ... case',而是? –

回答

1

不要讓您的MainActivityOnClickListener

相反,創建匿名OnClickListener s到添加到每個按鈕:

Button green= (Button) findViewById(R.id.green_button); 
green.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v) { 
    if (!textViewString.equals("Green")) return; 
    Resources res = getResources(); 
    String[] myString = res.getStringArray(R.array.colorArray); 
    String q = myString[r_generator.nextInt(myString.length)]; 
    TextView tv = (TextView) findViewById(R.id.color_text); 
    tv.setText(q); 
    } 
}); 

Button blue = (Button) findViewById(R.id.blue_button); 
blue.setOnClickListener(new View.OnClickListener() { 
    @Override public void onClick(View v) { 
    if (!textViewString.equals("Blue")) return; 
    Resources res = getResources(); 
    String[] myString = res.getStringArray(R.array.colorArray); 
    String q = myString[r_generator.nextInt(myString.length)]; 
    TextView tv = (TextView) findViewById(R.id.color_text); 
    tv.setText(q); 
    } 
}); 

那麼就沒有必要了很長的if/else鏈。

+0

非常感謝!然而...每當我按下按鈕,應用程序崩潰。你知道爲什麼嗎? – Franco

+0

看你的logcat。 –

+0

'07-23 17:35:23.234 25708-25708/com.example.franco.sampleapp E/AndroidRuntime:致命例外:main java.lang.NullPointerException'。我不知道這意味着什麼......謝謝! – Franco

相關問題