0

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 を押しても何もしません:/

4

3 に答える 3

2

MyButtonClassまず、有効な Java クラスではないため、Java コードはコンパイルされません。

第二に、コンストラクタを に修正しても、 viaMyButtonClassの子を見つけようとしていて、子がないため、実行時にクラッシュします。MyButtonClassfindViewById()

第 3 に、コンパイルできたとしても、コンストラクターでロジックを正しく実装したとしてもMyButtonClass、レイアウト リソースで を参照していないため、使用されません。

第 4 に、時間をかけて Google やその他の経験豊富な Android 開発者が作成したコードを読むと、継承をこのように使用する人はほとんどいないことがわかります。MyButtonClassアクティビティまたはフラグメントはリスナーを設定できる (そして設定する必要がある) ため、まったく必要ありません。つまり、継承よりも構成を優先します。

于 2013-08-02T12:52:52.797 に答える
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();

        }

    });

}

    }

幸運を祈ります =)

于 2013-08-02T12:54:20.820 に答える
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!");

        }
    });
  }
}
于 2013-08-02T12:51:49.897 に答える