Android 安卓:如何知道里面点击了哪个按钮;onActivityResult“;方法

Android 安卓:如何知道里面点击了哪个按钮;onActivityResult“;方法,android,Android,我有两个按钮,它们都做条形码扫描。一旦扫描返回,我想知道用户点击了哪个按钮,这样我就可以在“onActivityResult”方法上选择不同的路径。我该怎么做 我可以找出onClick()方法中单击的按钮,但这没有帮助 public class ReaderActivity extends AppCompatActivity { private Button scan_btn, verifyButton; @Override protected void onCreate

我有两个按钮,它们都做条形码扫描。一旦扫描返回,我想知道用户点击了哪个按钮,这样我就可以在“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);
        }
    }
}

您可以在活动中添加布尔值

例如:

使用下面的代码

 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()中执行操作


希望这些对您有所帮助。

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

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的
标记中添加
android:name=“.myApplication”
。然后在我的ReaderActivity中,在按钮单击操作期间,我设置

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

取决于我单击的按钮。关于我使用的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);
        }
    }
}

不,没有。在发布之前,我尝试过类似的方法。isScanButtonClicked始终保持您声明的值(在本例中,私有布尔isScanButtonClicked默认为false),无论我单击哪个按钮-状态在onActivityResult方法中不可用使其保持静态然后您可以给出一个示例如何执行?您是否在某处执行“startActivityForResult”?不,我不是。我还没有这样开始扫描活动。你能在这里发布initiateScan方法吗?它是我正在使用的zxing库的一部分。我没有写我知道这种方法。但我想我的问题不是这么简单,因为我有zxing api等。
((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);
        }
    }
}