ImageButton在类中不起作用

时间:2013-08-02 12:46:00

标签: java android class view

我正在尝试创建一个测试应用程序,当我按下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没有做任何事情:/

3 个答案:

答案 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!");

        }
    });
  }
}