Как динамически добавить editText и кнопки с помощью LayoutInflater и установить для них уникальный идентификатор? - PullRequest
0 голосов
/ 21 октября 2019

Я добавляю спецификации для продукта и хочу, чтобы, когда пользователи щелкают по add_field_btn, он отображал файл XML, содержащий два editText с кнопкой удаления на стороне, используя LayoutInflater. Но я не знаю, как реализовать добавление уникального идентификатора для каждого сгенерированного текста редактирования.

Ниже приведен мой код:

MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_products);

    backBTN = findViewById(R.id.imageButton);
    backBTN.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(AddProductsActivity.this, StoreHomeActivity.class);
            intent.putExtra("userid", userID);
            startActivity(intent);
            overridePendingTransition(R.anim.mid_to_left, R.anim.right_to_mid);
        }
    });
}

public void onAddField(View v) {
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.product_specification_item_layout, null);
    parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount());
}

public void onDelete(View v) {
    parentLinearLayout.removeView((View) v.getParent());
}

1 Ответ

1 голос
/ 21 октября 2019

Вы на правильном пути;просто проверьте эту функцию ниже, что я изменил.


int myTagCount=0;

public void onAddField(View v) {

               myTagCount++;

                LayoutInflater inflater = LayoutInflater.from(getContext());

                View view = inflater.inflate(R.layout.product_specification_item_layout, null);

                TextView tv_delete = (TextView) view.findViewById(R.id.tv_delete);
                tv_delete.setText("Delete");

                tv_delete.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                         parentLinearLayout.removeView(view);
                    }
                });

                view.setTag(myTagCount);

                parentLinearLayout.addView(view);

   }  

Я использую inflater таким образом. Это также поможет вам.

Для getting value with Tag отметьте это:

      for (int i = 0; i < parentLinearLayout.getChildCount(); i++) {
            View view = parentLinearLayout.getChildAt(i);
            if (view.getTag().equals(myTagCount)) {
                EditText editText = (EditText) view.findViewById(R.id.edt1);

                String myText = editText.getText().toString();
                break;
            }

        }
...