setText Android已停止

时间:2014-04-11 15:35:04

标签: android

为什么我在setText()收到错误? 如果我从应用程序中删除它可以正常工作,我也尝试了append()

xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.problema1multi.MainActivity$PlaceholderFragment" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="17dp"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button1"
            android:layout_below="@+id/button1"
            android:layout_marginTop="35dp"
            android:background="@drawable/botones"
            android:onClick="misteri"
            android:text="Misteri"
            android:width="500dp" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignRight="@+id/button2"
            android:layout_below="@+id/button2"
            android:layout_marginTop="28dp"
            android:background="@drawable/botones"
            android:onClick="risa"
            android:text="Risa"
            android:width="500dp" />

        <Button
            android:id="@+id/button1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginTop="16dp"
            android:background="@drawable/botones"
            android:onClick="guerra"
            android:text="Guerra"
            android:width="500dp" />
    </LinearLayout>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/linearLayout1"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/linearLayout1"
        android:layout_marginTop="58dp"
        android:text="TextView" />

</RelativeLayout>

MainActivity

public class MainActivity extends ActionBarActivity {

private Button boton1;
private Button boton2;
private Button boton3;
private TextView mensaje;
MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    boton1 = (Button) findViewById(R.id.button1);
    boton2 = (Button) findViewById(R.id.button2);
    boton3 = (Button) findViewById(R.id.button3);
    mensaje = (TextView) findViewById(R.id.textView1);

}


public void detener(View v) {
    if (mp != null) {
        mp.stop();
    }
}

public void risa(View arg0) {
    detener(arg0);
    mp = MediaPlayer.create(MainActivity.this, R.raw.risas);
    mp.start();
    mensaje.setText("Reproduciendo Risa");

}

谢谢!

2 个答案:

答案 0 :(得分:0)

您已发布片段xml,但您尝试从活动中引用这些视图。您发布的代码与您发布的XML不匹配。您发布的代码引用了activity_main.xml

textView1中没有标识为activity_main.xml的TextView,因此当您尝试在其上调用NullPointerException时,这会导致setText

我建议您再次阅读片段与活动 - 如果这是一个简单的应用程序,您可能根本不需要片段,只能在活动中完成所有操作。

http://developer.android.com/guide/components/fragments.html

答案 1 :(得分:0)

您发布的Java代码似乎是您的Activity代码,但XML是您的Fragment XML。我认为你使用IDE向导来生成一个带片段的活动,所以这会从一个简单的Activity中稍微改变一下。

选项1:

在扩充XML布局后,将mensaje = (TextView) findViewById(R.id.textView1);移到Fragment onCreateView()方法中,例如:

TextView mensaje;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
   View rootView = inflater.inflate(R.layout.main, container, false);
   mensaje = (TextView) rootView.findViewById(R.id.textView1);
} 

选项2:

使用您在XML中发布的Activity,例如,如果XML为main.xml,则Activity中必须使用setContentView(R.id.main); < / p>

您应该阅读有关Fragments的更多信息,以了解它们的工作原理。另请注意,在使用Activity的{​​{1}}中,只会返回您使用findViewById()夸大的XML的引用,因此您的ID setContentView()必须位于textView1布局中。< / p>