我遵循本教程:
我正在修改DisplayMessageActivity以更改输出文本的颜色并使用xml更改背景。
我遇到代码问题,当我尝试运行时,我的android应用程序关闭了。该应用程序将显示从上一个视图写入的文本,并在单击“发送”按钮时使用另一个视图显示该文本。
DisplayMessageAcitivity:
public class DisplayMessageActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Get the message from the intent
Intent intent = getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = (TextView) findViewById (R.id.DisplayActivityMessageTextView);
// Create the text view
textView.setText(message);
// Set the text view as the activity layout
setContentView(textView);
}
我有2个XML文件:activity_main.xml和fragment_main.xml我已经在fragment_main.xml中包含了textView。
<TextView android:id="@+id/DisplayActivityMessageTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/opaque_red" />
的strings.xml:
<color name="opaque_red">#f00</color>
logcat的:
08-13 10:22:43.919: E/AndroidRuntime(25966): FATAL EXCEPTION: main
08-13 10:22:43.919: E/AndroidRuntime(25966): Process: com.example.myfirstapp, PID: 25966
08-13 10:22:43.919: E/AndroidRuntime(25966): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException
08-13 10:22:43.919: E/AndroidRuntime(25966):
...
08-13 10:22:43.919: E/AndroidRuntime(25966): Caused by: java.lang.NullPointerException
08-13 10:22:43.919: E/AndroidRuntime(25966):
...
答案 0 :(得分:2)
在setContentView(textView);
findViewById
即。将代码重写为
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the text view as the activity layout
setContentView(R.layout.activity_main);
// Get the message from the intent
}
并更改
Intent intent = getIntent();
到
Intent intent = getActivity().getIntent();
并使用
Intent intent = getActivity().getIntent();
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
TextView textView = (TextView) findViewById R.id.DisplayActivityMessageTextView);
// Create the text view
textView.setText(message);
在您onCreateView
的{{1}}中,因为mainFragment
是您片段的一部分。
答案 1 :(得分:0)
只是一个有根据的猜测。这个宣言......
<color name="opaque_red">#f00</color>
必须放在colors.xml
资源文件而不是strings.xml
资源文件
或者,如果您不想创建新文件。至少在TextView
...
android:textColor="@color/opaque_red"
为...
android:textColor="@string/opaque_red"
答案 2 :(得分:0)
只是一个猜测,把
setContentView(textView);
前
TextView textView = (TextView) findViewById R.id.DisplayActivityMessageTextView);
答案 3 :(得分:0)
你应该使用Bundle来获得额外的
Intent intent = getIntent();
Bundle extras = intent.getExtras();
String message = extras.getString(MainActivity.EXTRA_MESSAGE);
答案 4 :(得分:0)
问题是findViewById()
仅适用于膨胀的(这意味着布局中的所有视图都是作为布局xml中的对象创建的)布局。当您致电setContentView(R.layout.asdf)
时,布局会自动膨胀。由于您不会使包含DisplayActivityMessageTextView
的布局膨胀,因此无法找到视图且textVeiw
为空,这会导致NullPointerException。
我建议你只需创建一个新的TextView代替findViewById
:
TextView textView = new TextView(this);
并设置textColor:
textView.setTextColor(getResources().getColor(R.color.opaque_red));
另一个问题是,你的opaque_red是在Srtings.xml中定义的。该文件应该称为Colors.xml