我正在尝试创建一个测试应用程序,当我按下ImageButton时,会出现一条日志消息。简单。
我希望ImageButton视图与类一起使用。
我这样做了: 更新了正确的构造名称
public class MainActivity extends Activity {
MyButtonClass btnOk = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
btnOk = new ButtonClass(this);
setContentView(R.layout.activity_main);
}
}
class MyButtonClass extends ImageButton{
public MyButtonClass(Context context) {
super(context);
findViewById(R.id.btButton);
OnClickListener oclBtnOk = new OnClickListener() {
@Override
public void onClick(View v) {
// change text of the TextView (tvOut)
Log.e("Log This:","Yay! I am working!");
}
};
setOnClickListener(oclBtnOk);
}
}
我的布局xml是:
<?xml version="1.0" encoding="utf-8"?>
<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="horizontal" >
<ImageButton
android:id="@+id/btButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
当我运行应用程序时,我没有在Log cat上获得任何错误,应用程序也没有退出,但是按下它时ImageButton没有做任何事情:/
答案 0 :(得分:2)
首先,您的Java代码将无法编译,因为MyButtonClass
不是有效的Java类。
其次,即使你将你的构造函数修复为MyButtonClass
,你也会在运行时崩溃,因为你试图通过MyButtonClass
找到findViewById()
的孩子,并且没有孩子。
第三,即使它确实编译了,即使你在构造函数中正确实现了逻辑,你也不会在布局资源中引用MyButtonClass
,因此不会使用它。
第四,如果你花时间阅读谷歌和其他有经验的Android开发人员编写的代码,你会发现很少(如果有的话)会以这种方式使用继承。您根本不需要MyButtonClass
,因为您的活动或片段可以(并且应该)设置监听器。换句话说,favor composition over inheritance。
答案 1 :(得分:1)
为什么陷入如此混乱。你的代码需要修剪很多。你可以试试这段代码
public class MyAndroidAppActivity extends Activity {
ImageButton imageButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addListenerOnButton();
}
public void addListenerOnButton() {
imageButton = (ImageButton) findViewById(R.id.imageButton1);
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Toast.makeText(MyAndroidAppActivity.this,
"ImageButton is clicked!", Toast.LENGTH_SHORT).show();
}
});
}
}
祝你好运=)
答案 2 :(得分:0)
使用
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageButton ib = (ImageButton)findViewById(R.id.btButton);
ib.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.e("Log This:","Yay! I am working!");
}
});
}
}