所以我有一个非常简单的应用程序,我正在努力。它的目的是从1台,1台或2台显示器收集资产数据。 我的表单包含3个edittext视图和3个按钮(我为每个资产收集一个数据)。按钮为条形码扫描器调用startActivityForResult,然后我想根据按下的按钮将结果传递给相关的edittext视图(例如:按“Asset - PC”edittext右侧的“scan”按钮,扫描并返回数据如果您按下“资产 - Mon1”编辑文本旁边的“扫描”按钮,则将数据返回到“资产 - Mon1”编辑文本....依此类推......)
使用我在这里的代码,所有项目都可以工作,而不是按照预期。按下任何“扫描”按钮始终会将结果返回到第一个edittext视图“Asset - PC”。
public class TestShit extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void assetPcClick(View view) {
Intent intent1 = new Intent("com.google.zxing.client.android.SCAN");
intent1.setPackage("com.google.zxing.client.android");
intent1.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent1, 0);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetPC = (EditText) findViewById(R.id.assetPC);
assetPC.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
public void assetMon1Click(View view) {
Intent intent2 = new Intent("com.google.zxing.client.android.SCAN");
intent2.setPackage("com.google.zxing.client.android");
intent2.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent2, 0);
}
public void onActivityResult2(int requestCode, int resultCode, Intent intent2) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents2 = intent2.getStringExtra("SCAN_RESULT");
String format2 = intent2.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon1 = (EditText) findViewById(R.id.assetMon1);
assetMon1.setText(contents2);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
public void assetMon2Click(View view) {
Intent intent3 = new Intent("com.google.zxing.client.android.SCAN");
intent3.setPackage("com.google.zxing.client.android");
intent3.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent3, 0);
}
public void onActivityResult3(int requestCode, int resultCode, Intent intent3) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents3 = intent3.getStringExtra("SCAN_RESULT");
String format3 = intent3.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon2 = (EditText) findViewById(R.id.assetMon2);
assetMon2.setText(contents3);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
}
关于如何更好地管理我的多个“ActivityForResult”和“onActivityResult”的任何建议?
我的修复,谢谢你的帮助!
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetPC = (EditText) findViewById(R.id.assetPC);
assetPC.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon1 = (EditText) findViewById(R.id.assetMon1);
assetMon1.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
if (requestCode == 2) {
if (resultCode == RESULT_OK) {
String contents1 = intent.getStringExtra("SCAN_RESULT");
String format1 = intent.getStringExtra("SCAN_RESULT_FORMAT");
EditText assetMon2 = (EditText) findViewById(R.id.assetMon2);
assetMon2.setText(contents1);
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
答案 0 :(得分:35)
在你的startActivityForResult
中,不要在两个电话上使用0 ...使用不同的数字,如0& 1 ...然后您可以使用requestCode在onActivityResult方法中实现切换。如果requestCode = 0则返回第一个方法,如果是1,则返回第二个方法。对于更多的电话,这应该是相同的。
public void onActivityResult(int requestCode, int resultCode, Intent intent){
switch(requestCode){
case 0: // Do your stuff here...
break;
case 1: // Do your other stuff here...
break;
case etc:
break;
}
}
调用应该是这样的: (这是第一次)
startActivityForResult(intent1, 0);
(第二次)
startActivityForResult(intent2, 1);
(第三次)
startActivityForResult(intent3, 2);
(第n次)
startActivityForResult(intentn, n - 1);
或者,您可以声明要使用的静态int值,而不是更难以识别的int值。
答案 1 :(得分:3)
Android中没有任何东西可以识别并调用名为onActivityResult2或onActivityResult3的方法。这些只是您编写的方法名称,系统将忽略这些名称。
您需要更改代码,以便在调用startActivityForResult()时传递不同的请求代码。 (requestCode是该方法的第二个参数)
然后在onActivityResult中检查requestCode以查看您从哪个活动获得结果,并相应地处理。
答案 2 :(得分:2)
当你使用startActivityForResult发送请求代码时, 对于从按钮开始的每个活动,这应该是不同的(唯一的),例如按钮1启动活动请求代码1,按钮2请求代码= 2,按钮3请求代码= 3,然后对于您的父活动,您必须只有一个onActivityResult() 在这个函数中取一个switch case,扫描请求代码,requestcode = 1将给出第一个活动的结果,请求代码= 2给出活动2等等......