【问题标题】:Android Emulator crash "Unfortunately _app name_ has stopped"Android 模拟器崩溃“不幸的是 _app name_ 已停止”
【发布时间】:2014-05-27 17:41:00
【问题描述】:

我看到了一些关于这个主题的问题的答案,但我发现这些答案会根据应用程序的编码而变化。 我是 android 应用程序的新手,我下面的教程使用一个按钮来增加,另一个按钮来减少计数器。我在模拟器上收到“不幸的是 AddSubb 已停止”错误。

MainActivity.java

    package com.example.addingsubstracting;

    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v7.app.ActionBarActivity;

    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;

public class MainActivity extends ActionBarActivity {
    int counter;
    Button add, sub;
    TextView display;

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



        counter = 0;
        add = (Button) findViewById(R.id.bAdd);
        sub = (Button) findViewById(R.id.bSub);
        display = (TextView) findViewById(R.id.tvDisplay);


        add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                counter++;
                display.setText("Your total is " + counter);
            }
        });
        sub.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                counter--;
                display.setText("Your total is " + counter);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }
    }

    }

fragment_main.xml

<LinearLayout 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:orientation="vertical" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="Yout total is 0"
    android:textSize="20dp"
    android:id="@+id/tvDisplay" />

<Button
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:text="Add one"
    android:layout_gravity="center"
    android:textSize="30dp"
    android:id="@+id/bAdd" />
<Button
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:text="Substract one"
    android:layout_gravity="center"
    android:textSize="30dp"
    android:id="@+id/bSub" />
      </LinearLayout>

Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.addingsubstracting"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="19" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.addingsubstracting.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

【问题讨论】:

  • 您的按钮是片段布局的一部分。您应该在片段中找到并设置点击侦听器

标签: java android android-layout android-emulator


【解决方案1】:

这是因为findViewById()activity_main 布局中搜索,而按钮位于片段的布局fragment_main 中。

在片段的onCreateView() 方法中移动那段代码:

例如:

//...

View rootView = inflater.inflate(R.layout.fragment_main, container, false);
Button add = (Button)rootView.findViewById(R.id.R.id.bAdd);
add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter++;
            display.setText("Your total is " + counter);
        }
    });

请注意,现在您通过 rootView 视图访问它:

例如:

Button buttonClick = (Button)rootView.findViewById(R.id.button);

否则你会再次收到NullPointerException

【讨论】:

  • 试试这个答案...@user3680799
  • 那你为什么不接受这个作为答案???如果对你有帮助请标记为答案..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2015-09-13
  • 2014-08-04
  • 2015-05-07
  • 1970-01-01
  • 2012-07-12
相关资源
最近更新 更多