传递不同按钮的不同值
Posted
技术标签:
【中文标题】传递不同按钮的不同值【英文标题】:passing different vales of different buttons 【发布时间】:2018-03-27 02:09:25 【问题描述】:我在活动 1(犯罪和健康)上有 2 个按钮,它们具有不同的 onClickListeners,并且这两个功能导致相同的活动 2...
在活动 2 上,我想区分用户单击了哪个按钮(无论是犯罪还是健康),以便应用程序可以生成相应的消息。..
我正在使用 putExtra 和 bundle,并且还能够从活动 1 到活动 2 检索数据,但是在活动 2 上,我无法理解应该使用哪种 if/else 或 switch 语句,因此我可以区分按下了哪个按钮按用户
活动 1 - 次要
public class Minor extends Fragment implements View.OnClickListener
public String option;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view = inflater.inflate(R.layout.minor_view, container, false);
Button ec = view.findViewById(R.id.ec);
ec.setOnClickListener(this);
Button hc = view.findViewById(R.id.hc);
hc.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Object view=null;
buttonClicked( (View) view );
);
return view;
@Override
public void onClick(View view)
final Intent intent = new Intent(getActivity(),HelpCall.class);
Bundle b = new Bundle();
b.putString(option,"ec");
intent.putExtras(b);
startActivity(intent);
public void buttonClicked (View v)
final Intent intent = new Intent(getActivity(),HelpCall.class);
Bundle b = new Bundle();
b.putString( option,"hc");
intent.putExtras(b);
startActivity(intent);
活动 2 - HelpCall
public class HelpCall extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_help_call );
Bundle b = getIntent().getExtras();
String ec = b.getString("ec");
String hc = b.getString("hc");
Button sms = (Button) findViewById(R.id.sms);
sms.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// sendSms( "number", "Emergency.. " );
Toast.makeText( getApplicationContext(), "emergency call crime / health", Toast.LENGTH_LONG ).show();
);
private void sendSms(String phoneNumber, String message)
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
【问题讨论】:
【参考方案1】:好的,所以你基本上想从包中放置和获取数据。
这个想法很简单:
hc.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
final Intent intent = new Intent(getActivity(),HelpCall.class);
Bundle b = new Bundle();
b.putString("option", "hc");
intent.putExtras(b);
startActivity(intent);
);
ec.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
final Intent intent = new Intent(getActivity(),HelpCall.class);
Bundle b = new Bundle();
b.putString("option", "ec");
intent.putExtras(b);
startActivity(intent);
);
在您的第二个HelpCall
活动中,您只需要获取传递的值:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_help_call );
String data = getIntent().getExtras().get("option");
此data
字符串将包含 ec 或 hc,具体取决于上一个活动中单击的按钮。
您还可以在代码耦合方面进行一些改进,我写了几篇初学者文章可能会帮助您解决这个问题。
[androidBits] Passing data in Android
[AndroidBits] How to decouple navigation between your components
【讨论】:
谢谢@JaoquimLey,你的回答对我来说效果很好......我无法解决如何发送按钮信息以将按钮信息发送到其他屏幕......非常感谢 如果您认为我的答案确实有效,为什么不将其作为公认的答案? =) 嗯,那是因为我接受的答案也回答了我的 if/else 问题,我提出了问题......你的两个答案都是正确的,都对我有用,但他给了我是我问题的完整答案 并且没有冒犯...请 Ofc 我没有被冒犯,呵呵。只是好奇。此外,if / else 语句是错误的,您应该始终确定您收到的是什么,想象您要添加另一个案例,那么您的 else 将是错误的。只是一个小提示。【参考方案2】:假设 hc 表示健康,ec 表示犯罪,那么我会做这样的事情。 首先,您需要使用一个键将数据传递给第二个活动,假设键是“选项”,然后在您的两个按钮中写下这个,但在第三行中根据单击的按钮更改第二个值(“ec " 或 "hc")
final Intent intent = new Intent(getActivity(),HelpCall.class);
Bundle b = new Bundle();
b.putString("option","ec");
intent.putExtras(b);
startActivity(intent);
现在在第二个活动中,您将获得此值。
Bundle b = getIntent().getExtras();
String option = b.getString("option");
现在在点击监听器中
sms.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
//sendSms( "number", "Emergency.. " );
if(option.contentEquals("ec"))
//crime clicked do thing here
else
//health clicked do thing here
);
【讨论】:
thanku @DaiwikDan 你的回答很有帮助......我没有得到的是如何将有关按钮的内容发送到下一个屏幕......所以谢谢 【参考方案3】:在你的代码中改变这些东西
public String option;
到
public String option = "value";
还有
Bundle b = getIntent().getExtras();
String emergency_type = b.getString("value");
String call_type;
if(call_type.equalsIgnoreCase("ec")
call_type= "ec" ;
else
call_type = "hc";
Button sms = (Button) findViewById(R.id.sms);
sms.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
// sendSms( "number", "Emergency.. " );
Toast.makeText( getApplicationContext(), "emergency call " + call_type, Toast.LENGTH_LONG ).show();
);
【讨论】:
感谢您的快速回复@MayankBhatnagar,但不知道为什么这给了我关于 call_type 的小错误........而且我在我的东西中是如此我没有检查那里有什么错误。 .....但是现在我阅读了您的代码,并且它的 call_type 没有来自上一个屏幕的任何值...而是它的 emergency_type 获取值,而 call_type 在这里以某种方式无关紧要。但总的来说非常感谢您的回答【参考方案4】:我无法理解哪种 if/else 或 switch 语句 我应该使用这样我才能区分用户按下了哪个按钮
您实际上可以将按钮 ID 传递给下一个活动
活动 1 中的示例
intent.putExtra("slot", v.getId());
在活动2中
int buttonId = getIntent().getIntExtra("slot", 0);
switch()
case R.id.firstbutton:
//Do what you want
break;
case R.id.secondbutton:
//Do What you whant
【讨论】:
以上是关于传递不同按钮的不同值的主要内容,如果未能解决你的问题,请参考以下文章
CaliburnMicro:在我的计算器应用程序中,我想要一种方法来处理所有“数字”按钮(0-9),每个按钮传递不同的值