2

我有一个包含按钮的自定义导航栏,我会调度点击事件,以便包含我的导航栏的活动可以响应点击

    public class BarrePersonnalisee extends LinearLayout implements OnClickListener {
        Context mycontext;
        View convertview;
        ImageButton searchadresse;

        public BarrePersonnalisee(Context context, AttributeSet attrs) {
            super(context, attrs);
            mycontext=context;
            convertview=LayoutInflater.from(mycontext).inflate(R.layout.barre, this);
            searchadresse=(ImageButton)convertview.findViewById(R.id.searchadresse);
            searchadresse.setOnClickListener(this);
        }

        public void onClick(View arg0) {
            switch (arg0.getId()) {
            case R.id.searchadresse:
                //I want to dispatch this event
                    break;
                   }
            }
    ....
    }

public class TaxiMapActivity extends MapActivity{

    BarrePersonnalisee barre;

    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        barre=(BarrePersonnalisee)this.findViewById(R.id.barre1);
        //task to do here


}

谁能帮忙?

4

4 回答 4

3

我相信你正在寻找的是button.performClick()

如果你不想要咔哒声,你可以这样做:

button.setSoundEffectsEnabled(false)
于 2012-04-18T18:07:30.973 回答
0

您实际上可以在这里使用 EventBus:http: //greenrobot.org/eventbus/

  1. 加载 EventBus

    依赖项 { 编译 fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.1.1' compile 'com.android .support:support-v4:24.1.1' 编译 'org.greenrobot:eventbus:3.0.0' }

  2. 创建新的事件类型类。我们称之为 BarrePersonnaliseeEvent。

公共类 BarrePersonnaliseeEvent {

private boolean _touchDown;
public BarrePersonnaliseeEvent(boolean touchDown) {
    _touchDown = touchDown;
}

public boolean isTouchDown(){
    return _touchDown;
} }
  1. 现在将事件传递给 EventBus

公共类 BarrePersonnalisee 扩展 LinearLayout 实现 OnClickListener { Context mycontext; 查看转换视图;ImageButton 搜索地址;

    public BarrePersonnalisee(Context context, AttributeSet attrs) {
        super(context, attrs);
        mycontext=context;
        convertview=LayoutInflater.from(mycontext).inflate(R.layout.barre, this);
        searchadresse=(ImageButton)convertview.findViewById(R.id.searchadresse);
        searchadresse.setOnClickListener(this);
    }

    public void onClick(View arg0) {
        switch (arg0.getId()) {
        case R.id.searchadresse:
            //I want to dispatch this event
                EventBus.getDefault().post(new BarrePersonnaliseeEvent(true));
                break;
               }
        }
....
}
  1. 更新 Activity 以开始接收事件:

公共类 TaxiMapActivity 扩展 MapActivity{

BarrePersonnalisee barre;

...
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    barre=(BarrePersonnalisee)this.findViewById(R.id.barre1);

}

@Subscribe(threadMode = ThreadMode.MAIN) public void onBarrePersonnaliseeEvent(BarrePersonnaliseeEvent 事件) { Toast.makeText(getActivity(), "按钮触摸:" + event.isTouchDown(), Toast.LENGTH_SHORT).show(); }

}

  1. 确保在您的 Activity 中注册和取消注册 EventBus

    @Override public void onStart(Context context) { super.onStart(context); EventBus.getDefault().register(this); }

    @Override public void onStop() { super.onStop(); EventBus.getDefault().unregister(this); }

于 2016-09-24T19:59:16.443 回答
-1

使用此代码

            Button b=new Button(this);
            b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                //what you want to do
            }
        })
于 2011-07-25T10:30:26.407 回答
-1

假设您需要将点击事件附加到导航栏内的按钮,您可以使用setOnClickListener()方法,并实现该onClick()方法,例如:

    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            //define what you want to do here
            Toast.makeText(getApplicationContext(), "Works", Toast.LENGTH_SHORT).show();
        }
    });

当您单击按钮时,它将显示一个吐司说“有效”。

于 2011-07-25T10:32:47.950 回答