传递不同按钮的不同值

时间:2017-10-15 13:02:28

标签: android button android-activity android-fragmentactivity

我在活动1(犯罪和健康)上有2个按钮,它们具有不同的onClickListeners,两个函数都导致相同的活动2 ...

关于活动2我想区分用户点击了哪个按钮(无论是犯罪还是健康),以便应用可以生成相应的消息。

我正在使用putExtra和bundle,并且还能够从活动1检索数据到活动2但是在活动2上我无法理解我应该使用什么样的if / else或switch语句,这样我可以区分按下哪个按钮按用户

ACTIVITY 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);
    }

}

4 个答案:

答案 0 :(得分:2)

好的,所以你基本上想要从一个包中提取和获取数据。

这个想法很简单:

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 ,具体取决于上一个活动中点击的按钮。

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

答案 1 :(得分:1)

让我们说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
 }
}
});

答案 2 :(得分:0)

在代码中更改这些内容

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();
        }

    });

答案 3 :(得分:0)

  

我无法理解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
    }