Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android按钮/应用程序不工作_Android_Xml_Button - Fatal编程技术网

Android按钮/应用程序不工作

Android按钮/应用程序不工作,android,xml,button,Android,Xml,Button,我一定在做一些非常愚蠢的事情。这是我的第二个应用程序-第一个运行良好(诚实) 我刚刚有一个基本的标题屏幕,上面有一个按钮,但当我点击按钮时什么也没发生。屏幕显示正确,但按钮没有响应-我在调试中尝试过,但没有结果…没有错误,没有信息消息,Zillch(我正在使用AVD) 这是我的密码 舱单: <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.spyeye" and

我一定在做一些非常愚蠢的事情。这是我的第二个应用程序-第一个运行良好(诚实)

我刚刚有一个基本的标题屏幕,上面有一个按钮,但当我点击按钮时什么也没发生。屏幕显示正确,但按钮没有响应-我在调试中尝试过,但没有结果…没有错误,没有信息消息,Zillch(我正在使用AVD)

这是我的密码

舱单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.spyeye"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="17" />

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

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

     <activity
        android:name="com.example.spyeye.createNewGameActivity"
        android:label="@string/app_name" 
        android:parentActivityName="com.example.spyeye.TitleScreen" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.spyeye.TitleScreen" />
    </activity>
该应用程序与我的其他应用程序之间唯一的主要区别在于,我现在尝试使用单一样式的文件,并重新设计了自己的按钮:

 <style name="spyEyeTheme" parent="android:Theme.Light">

    <item name="android:buttonStyle">@style/myButton</item>

</style>

<style name="myButton" parent="android:Theme.Light">

    <item name="android:background">#008080</item>
    <item name="android:textColor">#FFFFFF</item>
    <item name="android:textSize">24sp</item>
    <item name="android:typeface">sans</item>
    <item name="android:padding">10sp</item>

</style>

@样式/我的按钮
#008080
#FFFFFF
24便士
桑
10便士

有人看到我犯的明显错误了吗?

就我个人而言,我真的不是那种
android:onClick=“newGame”
东西的忠实粉丝。你应该用传统的方式来尝试,比如:

public class TitleScreen extends Activity {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);   
            }
        });
    }
}
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent newGameIntent = new Intent(this, createNewGameActivity.class);
        startActivity(newGameIntent);
    }
}
private final View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherButton:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelButton:
                ...
                break;
        }
    }
};
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;
    private Button otherBtn;
    private Button cancelBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);

        this.otherBtn = (Button) findViewById(R.id.otherBtn);
        this.otherBtn.setOnClickListener(this);

        this.cancelBtn = (Button) findViewById(R.id.cancelBtn);
        this.cancelBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherBtn:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelBtn:
                ...
                break;
        }        
    }
}
或者像这样:

public class TitleScreen extends Activity {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);   
            }
        });
    }
}
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent newGameIntent = new Intent(this, createNewGameActivity.class);
        startActivity(newGameIntent);
    }
}
private final View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherButton:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelButton:
                ...
                break;
        }
    }
};
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;
    private Button otherBtn;
    private Button cancelBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);

        this.otherBtn = (Button) findViewById(R.id.otherBtn);
        this.otherBtn.setOnClickListener(this);

        this.cancelBtn = (Button) findViewById(R.id.cancelBtn);
        this.cancelBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherBtn:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelBtn:
                ...
                break;
        }        
    }
}

如果您正在处理多个
按钮
,您可以在一个
OnClickListener
中处理它们,如下所示:

public class TitleScreen extends Activity {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);   
            }
        });
    }
}
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent newGameIntent = new Intent(this, createNewGameActivity.class);
        startActivity(newGameIntent);
    }
}
private final View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherButton:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelButton:
                ...
                break;
        }
    }
};
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;
    private Button otherBtn;
    private Button cancelBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);

        this.otherBtn = (Button) findViewById(R.id.otherBtn);
        this.otherBtn.setOnClickListener(this);

        this.cancelBtn = (Button) findViewById(R.id.cancelBtn);
        this.cancelBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherBtn:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelBtn:
                ...
                break;
        }        
    }
}
您可以获得调用的
视图的id
,并使用开关区分特定的
按钮。例如,在您的
活动中
可以这样实现:

public class TitleScreen extends Activity {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);   
            }
        });
    }
}
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Intent newGameIntent = new Intent(this, createNewGameActivity.class);
        startActivity(newGameIntent);
    }
}
private final View.OnClickListener clickListener = new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherButton:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelButton:
                ...
                break;
        }
    }
};
public class TitleScreen extends Activity implements View.OnClickListener {

    private Button newBtn;
    private Button otherBtn;
    private Button cancelBtn;

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

        this.newBtn = (Button) findViewById(R.id.newBtn);
        this.newBtn.setOnClickListener(this);

        this.otherBtn = (Button) findViewById(R.id.otherBtn);
        this.otherBtn.setOnClickListener(this);

        this.cancelBtn = (Button) findViewById(R.id.cancelBtn);
        this.cancelBtn.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        final int id = view.getId();
        switch (id) {

            case R.id.newBtn:
                Intent newGameIntent = new Intent(this, createNewGameActivity.class);
                startActivity(newGameIntent);
                break;

            case R.id.otherBtn:
                Toast.makeText(this, "Other Button clicked!", Toast.LENGTH_SHORT).show();
                break;

            case R.id.cancelBtn:
                ...
                break;
        }        
    }
}

有几件事引起了我的注意:

  • 类的名称应该以大写字母开头,因此应该调用
    createNewGameActivity
    而不是
    Activity
  • 使用
    片段
    活动的黄金时代已经结束。由于引入了
    片段
    活动
    应该是
    片段
    的容器。因此,即使在布局中只有一个
    按钮
    ,也应该有一个空的
    活动
    ,其中只包含一个
    片段
    ,在该
    片段
    中实现UI和逻辑
  • 不要使用android:onClick
。代码中根本没有表示将调用此方法。布局没有理由假设这样的方法存在于加载布局的
视图
片段
活动
中的任何位置。除此之外,它甚至没有那么方便。在99.9%需要设置
OnClickListener
的情况下,您还需要使用
按钮执行其他操作,然后仍然需要引用
android:onClick
只会将代码弄乱,使其更加混乱。它将实现细节分散开来,并使开发人员看不清。布局知道甚至定义了具体的实现细节,这本身就已经很糟糕了
我没有看到任何用于按钮或任何用于处理单击的onClickListeners。createNewGameActivity.class的代码在哪里?Derp。没有看到。对于grins,请删除imageview并查看按钮是否点击。@mtorres-我有该代码,但不想混淆东西-onClick似乎不起作用,因此它无法到达目的地…好的,你可能不喜欢它,但我在我的其他应用程序中广泛使用了它,而且很好。TBH,比“旧方法”简单得多:-)当然可以,在我看来它不干净。代码中根本没有表示将调用此方法。布局没有理由假设这样的方法存在于加载布局的
视图
片段
活动
中的任何位置。这很糟糕,它根本没有存在的理由。你从中得到了什么用呢?在99.9%的情况下,你需要设置一个
OnClickListener
,你还需要用
按钮做其他事情,然后你无论如何都需要参考。也许你已经习惯了,但对我来说,这是非常笨拙和不直观的。我的另一个应用程序屏幕上有4个按钮——如果我必须这样做,代码看起来会很可怕。但是谢谢你的建议,如果没有人能解释为什么另一种方法不起作用,我会使用这种方法…@Nelmo这只是
android:onClick
的另一个缺点。它应该可以工作,没有人知道错误在哪里,或者为什么什么都没有发生。它非常糟糕,并且对开发者隐藏了重要的东西。所有那些点击式的听众真的占用不了那么多空间。但我会在我的问题中编辑一种处理多个按钮点击的方法,非常快速和简单。