2017-04-02 76 views
-2

所以我试图使用微调来改变文本视图中消息的文本颜色。但是,当我尝试使用附加到我的按钮的功能时,请单击该活动崩溃。我重视的Java代码的相关部分和XML文件使用微调改变文本视图的文本颜色

import android.content.Intent; 
import android.graphics.Color; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class Colour extends AppCompatActivity { 

private Spinner mySpinner; 
public static final String EXTRA_MESSAGE = "message"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_colour); 
    Intent intent = getIntent(); 
    String messageText = intent.getStringExtra(EXTRA_MESSAGE); 
    TextView messageView = (TextView)findViewById(R.id.message); 
    messageView.setText(messageText); 
} 

public void change(View v){ 
    String text = mySpinner.getSelectedItem().toString(); 
    TextView newColour = (TextView) findViewById(R.id.message); 
    if(text == "Red"){ 
     newColour.setTextColor(Color.RED); 
    } 
    if(text == "Blue"){ 
     newColour.setTextColor(Color.BLUE); 
    } 
    if(text == "Green"){ 
     newColour.setTextColor(Color.GREEN); 
    } 
} 

XML文件:

<TextView 
    android:textColor="#000000" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/message" /> 

<Spinner 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:entries="@array/colours" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="16dp" 
    android:id="@+id/spinner" /> 

<Button 
    android:text="HOME" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button" 
    android:onClick="home" 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginBottom="52dp" /> 

<Button 
    android:text="changeColour" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/button4" 
    android:layout_above="@+id/button" 
    android:layout_alignStart="@+id/button" 
    android:layout_marginBottom="101dp" 
    android:onClick="change" /> 
+0

'我附上相关的部分...'现在添加logcat的,这是最相关的事情。 –

+0

未初始化Spinner并使用它将导致NullPointerException。 –

回答

2

mySpinner不访问之前初始化它的方法。请先初始化mySpinner。使用下面的代码

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mySpinner = (Spinner)findViewById(R.id.spinner); 

    } 

public void change(View v){ 
     String text = mySpinner.getSelectedItem().toString(); 
     TextView newColour = (TextView) findViewById(R.id.message); 
     if(text.equals("Red")){ 
      newColour.setTextColor(Color.RED); 
     } 
     if(text.equals("Blue")){ 
      newColour.setTextColor(Color.BLUE); 
     } 
     if(text.equals("Green")){ 
      newColour.setTextColor(Color.GREEN); 
     } 
    } 
+0

“私人Spinner mySpinner;”尽管我已经初步化了? – killiantos

+0

正在宣布的@killiantos。初始化是这样的:'mySpinner = new Spinner(context);'或者从布局获取'mySpinner =(Spinner)findViewById(R.id.myspinner);' – Zoe

+0

@kulousos请检查更新的答案 – user7676575

0

似乎你在change方法没有设置微调,所以你需要初始化第一