【问题标题】: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);
    }

}

【问题讨论】:

    标签: android button android-activity android-fragmentactivity


    【解决方案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 字符串将包含 echc,具体取决于上一个活动中单击的按钮。


    您还可以在代码耦合方面进行一些改进,我写了几篇初学者文章可能会帮助您解决这个问题。

    【讨论】:

    • 谢谢@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
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多