【问题标题】:Android: how to know which button was clicked inside "onActivityResult" methodAndroid:如何知道在“onActivityResult”方法中点击了哪个按钮
【发布时间】:2017-04-06 16:38:28
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

    例如:

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

    希望这些对你有所帮助。

    【讨论】:

    • 不,它没有。我在发布之前尝试了类似的方法。无论我单击哪个按钮,isScanButtonClicked 始终保持在您声明的值(在这种情况下,私有布尔 isScanButtonClicked 意味着 false) - onActivityResult 方法中的状态不可用
    • 然后将其设为静态
    【解决方案2】:

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

    【讨论】:

    • 你能举个例子吗?
    • 你在某处执行'startActivityForResult'吗?
    • 不,我不是。我还没有以这种方式开始扫描活动。
    • 你能把 initiateScan 方法贴在这里吗?
    • 它是我正在使用的 zxing 库的一部分。没写过
    【解决方案3】:

    通过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);
            }
        }
    }
    

    【讨论】:

      【解决方案4】:
      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 中尝试了这段代码,它可以工作。你做了类似的东西?

      【讨论】:

      • 我知道这种方法。但我想我的问题并不是这么简单,因为我有 zxing api 等。
      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多