Определите конкретный c динамически сгенерированный TextView для setText - PullRequest
0 голосов
/ 25 мая 2020

У меня есть функция, которая динамически генерирует определенное c количество 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 запускает другое действие, которое загружает камеру для захвата данных штрих-кода. В основном действии я создаю TextViews с помощью

        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 возвращает значение из активности камеры, но проблема в том, что он устанавливает для каждого сгенерированного 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);
                }
            }
        }
    }

1 Ответ

0 голосов
/ 25 мая 2020

В прослушивателе кликов 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, чтобы вы могли использовать его в onActivityResult с getStringExtra. Таким образом, вы будете знать тег TextView, который запустил действие.

В качестве альтернативы вы можете использовать requestCode, который вы передаете на startActivityForResult, чтобы различать текстовые представления. Например, передать код запроса 1 для текстового представления 1, запросить код 2 для текстового представления 2 и т. Д. c и использовать этот requestCode в onActivityResult.

...