识别一个特定的动态生成的 TextView 以便 setText

Identify a specific dynamically generated TextView in order to setText

我有一个函数可以动态生成特定数量的 TextView。

    TextView tv;
    EditText et;

    public TextView textViewGenerate(final Activity activity, String tag, Integer id) {

        tv = new TextView(activity);

        GradientDrawable gd = new GradientDrawable();
        gd.setColor(0xFFFFFF);
        gd.setCornerRadius(4);
        gd.setStroke(1, 0xFF757575);

        tv.setBackground(gd);

        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT,
                1.0f
        );

        tv.setPadding(7, 9, 0, 0);
        tv.setGravity(Gravity.START);
        tv.setTextSize(22);

        tv.setTag(tag);
        tv.setId(id);
        tv.setHint("Enter Module Serial Number");

        //Click to launch camera
        tv.setClickable(true);
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Intent intent = new Intent(ct, MctCameraActivity.class);
                Intent intent = new Intent(activity, MctCameraActivity.class);
                activity.startActivityForResult(intent, 1);
                //ct.startActivity(intent);
                //ToDo: finish receiving the data from the activityForResult
            }
        });

        lp.setMargins(10, 0, 10, 0);
        lp.setMarginStart(10);
        lp.setMarginEnd(10);

        tv.setLayoutParams(lp);

        return tv;
    }

}

onClick 会启动另一个 activity 加载相机以捕获条形码数据。在主要 activity 中,我使用

创建 TextView
        final LayoutElements le = new LayoutElements();
        mainLayout = (LinearLayout)findViewById(R.id.mctScanPageMain);

        for(int i = 0; i < 3; i++) {
            mainLayout.addView(le.textViewGenerate(this, "NewID" + i, i));
        }

onActivityResult returns 来自相机的值 activity 但问题是它将每个生成的 TextView 设置为具有相同的条形码编号(条形码编号作为字符串返回)。我如何修改它以便在 onActivityResult 中仅更改所选 TextView 的文本?

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == 1 && resultCode == RESULT_OK && data != null) {
            String returnResult = data.getStringExtra("result");

            for (int i=0; i < mainLayout.getChildCount(); i++){
                TextView tv = (TextView) mainLayout.findViewWithTag("NewID"+i);
                if(tv == null) {
                    break;
                } else {
                    tv.setText(returnResult);
                }
            }
        }
    }

在您的 TextView 的点击侦听器中,您可以更改:

Intent intent = new Intent(activity, MctCameraActivity.class);
activity.startActivityForResult(intent, 1);

Intent intent = new Intent(activity, MctCameraActivity.class);
intent.putExtra("text_view_tag", tag);
activity.startActivityForResult(intent, 1);

然后在 MctCameraActivity 的结果中将其发回,因此您可以在 onActivityResultgetStringExtra 中使用它。这样你就会知道开始于 activity.

的 TextView 标签

或者,您可以使用传递给 startActivityForResultrequestCode 来区分文本视图。例如,为文本视图 1 传递请求代码 1,为文本视图 2 传递请求代码 2 等,并在 onActivityResult.

中使用此 requestCode