我有一个带有10个按钮的活动,并且关于按钮的转移信息被点击到下一个活动。
View.OnLongClickListener olongBtn = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (v == btn1) {
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", "slot1");
startActivity(intent);
} else if (v == btn2) {
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", "slot2");
startActivity(intent);
} else if (v == btn3) {
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", "slot3");
startActivity(intent);
}
return false;
}
};
btn1.setOnLongClickListener(olongBtn);
btn2.setOnLongClickListener(olongBtn);
btn3.setOnLongClickListener(olongBtn);
}
我想像这样改变它
String slot = toString(v);
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", slot);
startActivity(intent);
但是当我这样做时,我接下来的活动是这样的:
android.widget.Button{6548fcd}VFED..CL...P....17.0-147.130 #7f08004f app:id/btnPayman}
但我是按钮对象的期望名称。
答案 0 :(得分:1)
要获取单击按钮的名称,请使用((Button)v).getText()
方法而不是v.toString()
返回调用Object的String表示形式:
String slot = (Button)v).getText().toString();
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", slot);
startActivity(intent);
答案 1 :(得分:1)
您只需发送按钮ID即可。
View.OnLongClickListener olongBtn = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", v.getId());
startActivity(intent);
return false;
}
};
在下一个活动中,您可以使用开关来了解按下了什么按钮:
int buttonId = getIntent().getIntExtra("slot", 0);
switch() {
case R.id.firstbutton:
//Do what you want
break;
case R.id.secondbutton:
//Do What you whant
}
发送int比发送一个String更好,因为你可以在接收器活动上使用一个开关,比if / else
更快。----------------------- EDIT ---------------------- < / p>
在使用include标签构建布局时,应该为每个按钮设置不同的id(同时设置Button文本)。您还可以将Integer用作每个按钮的标记,并将该标记发送到下一个活动(而不是id)。
在此处查看视图标记:View setTag() method
答案 2 :(得分:0)
如果您想发送按钮的名称,请尝试:
String slot = ((Button) v).getText().toString();
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", slot);
startActivity(intent);
答案 3 :(得分:0)
感谢用户pozuelog寻求解决方案。 我使用单独的xml文件进行布局,并通过include将其附加到main_activity。
结果,getId方法对我不起作用。
解决方案为我的按钮设置了标记。
btn1.setTag(1);
btn2.setTag(2);
btn3.setTag(3);
View.OnLongClickListener olongBtn = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Intent intent = new Intent(MainActivity.this, AddContact.class);
intent.putExtra("slot", String.valueOf(v.getTag()));
startActivity(intent);
return false;
}
};
btn1.setOnLongClickListener(olongBtn);
btn2.setOnLongClickListener(olongBtn);
btn3.setOnLongClickListener(olongBtn);
我认为该解决方案可能会进行优化,但我是googlecoder并暂时保留原样。