簡體   English   中英

Android:如何知道在“ onActivityResult”方法中單擊了哪個按鈕

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

我有兩個按鈕,它們都進行條形碼掃描。 從掃描返回后,我想知道用戶單擊了哪個按鈕,以便可以對“ onActivityResult”方法采用不同的路徑。 我怎么做?

我可以找出在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);
        }
    }
}

您可以在活動中添加布爾值

例如:

private boolean isScanButtonClicked;

使用以下代碼

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

                }

根據isScanButtonClicked值,您可以在onActivityResult()中執行操作

希望這些對您有所幫助。

您可以在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);
  }

...........

我在Android Studio中嘗試了此代碼,並且可以正常工作。 你做了類似的事情嗎?

通過get set方法解決

創建了一個如下所示的類

public class myApplication extends Application{

    private String someVariable;

    public String getWhichButton() {
        return someVariable;
    }

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

確保在AndroidManifest的<Application>標記中添加android:name=".myApplication" 然后在我的ReaderActivity中,單擊按鈕時,我設置了

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

要么

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

取決於我單擊哪個按鈕。 在onActivityResult方法上,我使用

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

檢索單擊了哪個按鈕以采取相應的措施。

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