Android 在短方法中引用多个按钮

Android 在短方法中引用多个按钮,android,button,Android,Button,我正在为Android设计一个键盘。 我刚刚通过在MainActivity中实现View.OnTouchListener,学会了在onCreate方法中定义按钮的简洁方法: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); defineButtons(); keyC.setO

我正在为Android设计一个键盘。 我刚刚通过在MainActivity中实现View.OnTouchListener,学会了在onCreate方法中定义按钮的简洁方法:

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

    defineButtons();


    keyC.setOnTouchListener(this);
//etc..

}
然后:

    private void defineButtons()
{

    keyC = (Button) findViewById(R.id.c);
//etc..
}
然后,我将定义使用此方法触摸按钮时发生的情况:

public boolean onTouch(View view, MotionEvent motion)
{
    int note = 0;

    switch(view.getId())
    {

    case R.id.c:    /** Note C*/
    {
        note = 60 + transposeOctave;
        motionTracker(view, motion, note);
    }
    break;
//etc...
}
最后一种方法必须对每个按钮分别重复,这看起来有点难看。 我可以使用Id返回一个数值来修改我的笔记值吗


干杯

您不能强制ID为特定值。在Android中没有办法做到这一点,Android资产打包工具(AAPT)将始终自动为您生成它们


但您仍然可以隐藏函数中从常量到整数的“丑陋”转换。示例:
keyboardIdToFrequency()

您的密钥是用XML定义的吗?如果是这样,我只需在每个标签上添加一个带有正确数值的
标签,如下所示:

android:tag="1"
然后,在代码中,您可以简单地执行以下操作:

int note = 0;
int tagValue = 0;

//Tags in XML are always strings
String tag = (String)view.getTag();

//Parse it to an integer
tagValue = Integer.parseInt(tag);

note = tagValue + transposeOctave;
motionTracker(view, motion, note);

您可以使用添加特定值作为标记

btn.setTag("something");
并在onTouch中使用

Button btn = (Button)view;

String val = btn.Gettag();
note = Integer.Valueof(val)+ transposeOctave;

哦,非常感谢,很简单!我一直在安卓系统中搜索:-标签,一定错过了那一个。:)没问题。:)如果这回答了您的问题,请接受。谢谢当然可以一个细节是,如果字符串已经作为字符串存储在XML中,为什么必须将其类型转换为字符串?因为
getTag()
返回一个通用的
对象(如果在代码中执行,则可以将任何内容存储为标记)。如果以编程方式执行此操作,则可以执行
view.setTag(整数(1))
,然后稍后只需执行
(Integer)view.getTag()
,但在本例中,只需使用XML就更方便了。