所以我有一个非常简单的应用程序,我正在努力.它的目的是从1台,1台或2台显示器收集资产数据.我的表单包含3个edittext视图和3个按钮(我为每个资产收集一个数据).该按钮调用startActivityForResult的条形码扫描仪,然后我想基于哪个按钮被按下(例如对结果传递给相关的EditText视图:按"扫描"按钮,"资产 - PC"的右边的EditText,扫描和返回数据如果您按下"资产 - 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
关于如何更好地管理我的多个"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
}
}
}
Run Code Online (Sandbox Code Playgroud)
Tha*_*e90 36
在你的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;
}
}
Run Code Online (Sandbox Code Playgroud)
这些电话应该是这样的:(第一次)
startActivityForResult(intent1, 0);
Run Code Online (Sandbox Code Playgroud)
(第二次)
startActivityForResult(intent2, 1);
Run Code Online (Sandbox Code Playgroud)
(第三次)
startActivityForResult(intent3, 2);
Run Code Online (Sandbox Code Playgroud)
(第n次)
startActivityForResult(intentn, n - 1);
Run Code Online (Sandbox Code Playgroud)
或者,您可以声明要使用的静态int值,而不是更难以识别的int值.
| 归档时间: |
|
| 查看次数: |
27726 次 |
| 最近记录: |