1个活动的多个onActivityResult

Dev*_*vin 18 android

所以我有一个非常简单的应用程序,我正在努力.它的目的是从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值.