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