2017-02-18 67 views
-3
package com.francesco.provadinuovo; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 

public class MainActivity extends AppCompatActivity { 

    Button button; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     button =(Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       System.out.println("Welcome!"); 

      } 
     }); 
    } 
} 

问题是: 02/18 14时32分三十零秒:启动MainActivity $ ADB推C:\ Users \用户启动\ AndroidStudioProjects \ Provadinuovo \应用\建立\输出\ APK \ APP-debug.apk /数据/本地的/ tmp/com.francesco.provadinuovo $亚行外壳时安装-r “/data/local/tmp/com.francesco.provadinuovo” 成功我的第一个应用程序不起作用,可以帮助我吗?

$亚行外壳上午开始-n“com.francesco “.provadinuovo/com.francesco.provadinuovo.MainActivity”-a android.intent.action.MAIN -c android.intent.category.LAUNCHER 客户端未准备好。等待进程联机 连接到设备模拟器上的进程2354 -5554 W/System:ClassLoader引用未知路径:/data/app/com.francesco.provadinuovo-1/lib/x86 W/art:在Android 4.1之前,方法android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat .updateTintFilter(android.graphics.PorterDuffColorFilter,android.content.res.ColorStateList,android.graphics.PorterDuff $模式)会错误地覆盖在android.graphics.drawable.Drawable I/OpenGLRenderer的包私有方法:初始化EGL,版本1.4 d/OpenGLRenderer:交换行为1和 E/EGL_emulation:TID 2445:eglSurfaceAttrib(1146):错误0x3009(EGL_BAD_MATCH) W/OpenGLRenderer:无法设置EGL_SWAP_BEHAVIOR上表面0x971ec920,误差= EGL_BAD_MATCH

+0

尝试再次阅读了该教程。 'button.findViewById(R.id。按钮);'甚至没有意义 –

回答

2

您需要交换2行。使用XML

findViewById(R.id.button); 
setContentView(R.layout.activity_main); 

setContentView(R.layout.activity_main); 
button = (Button) findViewById(R.id.button) 

并分配按钮成员变量在onCreate

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

备用溶液。您可以在您的活动中显式调用某个方法,并使其充当按钮点击的回调。 android:onClick="doAction"。在你的活动中,只需添加该方法。

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

public void doAction(View v){ 
    System.out.println("Welcome!"); 
} 
+0

我试图做到这一点,但我有同样的错误 – frlaka

+0

按钮需要分配@friaka –

+0

是的,谢谢我注意到它晚了。 – Enzokie

4

您必须先调用setContentView,之后,您可以使用“findViewById”。

也是一个小的失误与findViewById,你需要调用它的活动,而不是在按钮上,然后抹上返回的视图中,无论你正在尝试使用:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     button = (Button) findViewById(R.id.button); 

     button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       System.out.println("Welcome!"); 

      } 
     }); 
    } 
+0

^作品,更不用说了。您需要查看您的布局> activity_main.xml以使用正确的ID实现按钮。 (只是测试,它工作正常) – user7568042

+0

太感谢你了,现在它的工作...但我还有一个probleE/EGL_emulation:TID 2445:eglSurfaceAttrib(1146):错误0x3009(EGL_BAD_MATCH) W/OpenGLRenderer:无法设置EGL_SWAP_BEHAVIOR表面上0x971ec920,错误= EGL_BAD_MATCHm: – frlaka

+0

@frlaka编辑您的文章,并添加您有问题,而不是在评论请。 – JonZarate

0

(编辑:加铸)

我觉得

button.findViewById(R.id.button); 
setContentView(R.layout.activity_main); 

应改为:

setContentView(R.layout.activity_main); 
button = (Button) findViewById(R.id.button); 

第一行构建布局,第二行将对按钮构件的引用存储到button中,否则将为null

相关问题