[英]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.