简体   繁体   English

Android:如何知道在“ onActivityResult”方法中单击了哪个按钮

[英]Android: how to know which button was clicked inside “onActivityResult” method

I have two buttons, both of them does barcode scanning. 我有两个按钮,它们都进行条形码扫描。 Once it returns from scanning, I want to know which button the user clicked so I can take different path on "onActivityResult" method. 从扫描返回后,我想知道用户单击了哪个按钮,以便可以对“ onActivityResult”方法采用不同的路径。 How do I do that? 我怎么做?

I can find out which button was clicked inside onClick() method but that won't help. 我可以找出在onClick()方法中单击了哪个按钮,但这无济于事。

public class ReaderActivity extends AppCompatActivity {
    private Button scan_btn, verifyButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reader);
        scan_btn = (Button) findViewById(R.id.scan_btn);
        verifyButton = (Button) findViewById(R.id.buttonVerify);
        final Activity activity = this;
        scan_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                IntentIntegrator integrator = new IntentIntegrator(activity);
                integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                integrator.setPrompt("Scan");
                integrator.setCameraId(0);
                integrator.setBeepEnabled(false);
                integrator.setBarcodeImageEnabled(false);
                integrator.initiateScan();
            }
        });

        verifyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                IntentIntegrator integrator = new IntentIntegrator(activity);
                integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                integrator.setPrompt("LINE UP BARCODE WITH SCANNER");
                integrator.setCameraId(0);
                integrator.setBeepEnabled(false);
                integrator.setBarcodeImageEnabled(false);
                integrator.initiateScan();

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if(result != null){
            if(result.getContents()==null){
                Toast.makeText(this, "You cancelled the scanning", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(this, result.getContents(),Toast.LENGTH_LONG).show();

            }
        }
        else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

You can add boolean value inside your activity 您可以在活动中添加布尔值

eg : 例如:

private boolean isScanButtonClicked;

Use below code 使用以下代码

 scan_btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    isScanButtonClicked = true; // true a scan button clicked
                    IntentIntegrator integrator = new IntentIntegrator(activity);
                    integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                    integrator.setPrompt("Scan");
                    integrator.setCameraId(0);
                    integrator.setBeepEnabled(false);
                    integrator.setBarcodeImageEnabled(false);
                    integrator.initiateScan();
                }
            });


    verifyButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    isScanButtonClicked = false; // false as scan button not clicked
                    IntentIntegrator integrator = new IntentIntegrator(activity);
                    integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                    integrator.setPrompt("LINE UP BARCODE WITH SCANNER");
                    integrator.setCameraId(0);
                    integrator.setBeepEnabled(false);
                    integrator.setBarcodeImageEnabled(false);
                    integrator.initiateScan();

                }

According to isScanButtonClicked value you can perform your action inside onActivityResult() 根据isScanButtonClicked值,您可以在onActivityResult()中执行操作

Hope these help you. 希望这些对您有所帮助。

您可以在Intent数据返回中添加一些标志/数据,并将此数据处理到onActivityResult中,以在操作中单击按钮,或者更改resultCode的值以正确的方式处理此结果。

public class MainActivity extends AppCompatActivity {

    public Button btnOne;
    public Button btnTwo;
    public String btnClicked;

    public static int VALUEONE = 1;
    public static int VALUETWO = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnUm = (Button)findViewById(R.id.btnUm);
        btnDois = (Button)findViewById(R.id.btnDois);

        btnOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent test = new Intent(MainActivity.this, NextActivity.class);
                btnClicked = "btnOne";
                startActivityForResult(test,VALUEONE);
            }
        });

       btnTwo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               Intent test = new Intent(MainActivity.this, NextActivity.class);
                btnClicked = "btnTwo";
                startActivityForResult(test,VALUETWO);
            }
        });
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       System.out.println("Btn clicked: " + btnClicked);
  }

........... ...........

I try this code in my Android Studio and it works. 我在Android Studio中尝试了此代码,并且可以正常工作。 You made something similar to this? 你做了类似的事情吗?

Resolved it through get set method 通过get set方法解决

Created a class like below 创建了一个如下所示的类

public class myApplication extends Application{

    private String someVariable;

    public String getWhichButton() {
        return someVariable;
    }

    public void setWhichButton(String someVariable) {
        this.someVariable = someVariable;
    }
}

Make sure to add android:name=".myApplication" in the <Application> tag in AndroidManifest. 确保在AndroidManifest的<Application>标记中添加android:name=".myApplication" Then in my ReaderActivity during the button click action, I set 然后在我的ReaderActivity中,单击按钮时,我设置了

((myApplication) activity.getApplication()).setWhichButton("scan");

OR 要么

((myApplication) activity.getApplication()).setWhichButton("Verify");

depending on which button I click. 取决于我单击哪个按钮。 On the onActivityResult method I use 在onActivityResult方法上,我使用

((myApplication) this.getApplication()).getWhichButton();

to retrieve which button was clicked to take action accordingly. 检索单击了哪个按钮以采取相应的措施。

public class ReaderActivity extends AppCompatActivity{

    private Button scan_btn, verifyButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reader);
        scan_btn = (Button) findViewById(R.id.scan_btn);
        verifyButton = (Button) findViewById(R.id.buttonVerify);
        final Activity activity = this;
        scan_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((myApplication) activity.getApplication()).setWhichButton("scan");

                IntentIntegrator integrator = new IntentIntegrator(activity);
                integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                integrator.setPrompt("Scan");
                integrator.setCameraId(0);
                integrator.setBeepEnabled(true);
                integrator.setBarcodeImageEnabled(false);
                integrator.initiateScan();

            }
        });

        verifyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ((myApplication) activity.getApplication()).setWhichButton("verify");
                IntentIntegrator integrator = new IntentIntegrator(activity);
                integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES);
                integrator.setPrompt("LINE UP BARCODE WITH SCANNER");
                integrator.setCameraId(0);
                integrator.setBeepEnabled(true);
                integrator.setBarcodeImageEnabled(false);
                integrator.initiateScan();

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);


        if(result != null){
            if(result.getContents()==null){
                Toast.makeText(this, "You cancelled the scanning", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(this, result.getContents(),Toast.LENGTH_LONG).show();

                String val = ((myApplication) this.getApplication()).getWhichButton();
                if(val=="scan") {
                    Toast.makeText(this, "Scan button pressed", Toast.LENGTH_LONG).show();
                }
                else
                    Toast.makeText(this, "Verify button pressed", Toast.LENGTH_LONG).show();
            }
        }
        else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM