Создать несколько новых линейных макетов с уникальным идентификатором в корневом макете programiticaly в andriod

Вопрос: при нажатии кнопки я хочу добавить новый LinearLayout под основным макетом с уникальным идентификатором, чтобы я мог позже ссылаться на дочерний макет макета.
Это мой класс активности. При нажатии на кнопку Добавить новый линейный макет должен быть создан и добавлен в основной линейный макет. Каждый новый макет должен иметь уникальный идентификатор, так что этот новый идентификатор будет ссылаться позже.

public class CreateEventFragment extends Fragment{
    private ListView listView;
    private EditText createEventEtEventName,createEventEtQuestion;
    private AboutUsAdapter listAdapter;
    private List<MyPojoObj> obj;
    private String jsonAboutus;
    private ProgressBar createEventPb;
    private RadioGroup createEventRadioGroupEventType;
    private RadioButton createEventRadioType1,createEventRadioType2;
    private LinearLayout createEventLL;
    private Button createEventBtnAdd,createEventBtnSubmit;
    private int id=0;



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        if(Variable.sop)System.out.println("CreateEventFragment.onCreateView()");
        View rootView = inflater.inflate(R.layout.fragment_create_event, container,false);
        obj=new ArrayList<MyPojoObj>();
        createEventBtnAdd = (Button) rootView.findViewById(R.id.createEventBtnAdd);
        createEventBtnSubmit = (Button) rootView.findViewById(R.id.createEventBtnSubmit);
        createEventEtEventName=(EditText) rootView.findViewById(R.id.createEventEtEventName);
        createEventRadioType1=(RadioButton) rootView.findViewById(R.id.createEventRadioType1);
        createEventRadioType2=(RadioButton) rootView.findViewById(R.id.createEventRadioType2);*/
        createEventLL = (LinearLayout) rootView.findViewById(R.id.createEventLL);

        createEventEtEventName.setText("EventName");
        getMinutes());
        createEventBtnAdd.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                actionAddNewEvent();
            }
        });

        return rootView;
    }

    @SuppressWarnings("deprecation")
    void actionAddNewEvent(){

        id=id+1;

        int left=5;
        int top=1;
        int right=1;
        int bottom=0;

        int leftMargin=5;
        int topMargin=5;
        int rightMargin=5;
        int bottomMargin=5;

        int childId=0;

      LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams
        (LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        final LinearLayout ll = new LinearLayout(getActivity());
        ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
      ll.setOrientation(LinearLayout.VERTICAL);
      ll.setBackgroundColor(getActivity().getResources().getColor(R.color.feed_bg));
      ll.setLayoutParams(lp);
      ll.setId(id);
      ll.setTag(id);    
      createEventLL.addView(ll);
      Drawable img = getActivity().getResources().getDrawable( R.drawable.questions );
      img.setBounds( 0, 0, 55, 55 );

        //question edit text
      EditText createEventEtQuestion = new EditText(getActivity());
      createEventEtQuestion.setLayoutParams(lp);
      createEventEtQuestion.setPadding(left, top, right, bottom);
      createEventEtQuestion.setFocusable(true);
      createEventEtQuestion.setCompoundDrawables( img, null, null, null );
      createEventEtQuestion.setBackground(getActivity().getResources().getDrawable( R.drawable.border_1 ));
      createEventEtQuestion.setBackgroundColor(getActivity().getResources().getColor(R.color.feed_item_bg));

      RadioGroup rg = new RadioGroup (getActivity());
      rg.setId(500+id);

      RadioButton radioButton1 = new RadioButton(getActivity());
      radioButton1.setText("True/False");
      radioButton1.setId(100000+id);//set radiobutton id and store it somewhere
      radioButton1.setTextSize(12);
      RadioGroup.LayoutParams params = new RadioGroup.LayoutParams(RadioGroup.LayoutParams.MATCH_PARENT, RadioGroup.LayoutParams.WRAP_CONTENT);

      RadioButton radioButton2 = new RadioButton(getActivity());
      radioButton2.setText("Yes/No");
      radioButton2.setTextSize(12);
      radioButton2.setId(100001+id);//set radiobutton id and store it somewhere

      rg.addView(radioButton1, params);
      rg.addView(radioButton2, params);

      // Add Type Title
      TextView tv = new TextView(getActivity());
      //tv.setLayoutParams(lp);
      tv.setText("Answer Type");
      tv.setLayoutParams(lp);
      tv.setTextSize(12);
      tv.setPadding(left, top, right, bottom);

      LinearLayout.LayoutParams rmlp = new LinearLayout.LayoutParams
        (200, 50);

      Button removeBtn = new Button(getActivity());
      //tv.setLayoutParams(lp);
      removeBtn.setText("Delete Question:"+id);
      removeBtn.setPadding(left, top, right, bottom);
      removeBtn.setLayoutParams(rmlp);
      //removeBtn.setId(id);
      removeBtn.setTextSize(9);
      removeBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                actionRemoveQuestion(arg0);
            }
        });

      // draw line
      View v = new View(getActivity());
      v.setLayoutParams(new LinearLayout.LayoutParams(
       LayoutParams.MATCH_PARENT,   
       2
      ));
      v.setBackgroundColor(Color.parseColor("#000000"));


      ll.addView(createEventEtQuestion);
      ll.addView(tv);   
      ll.addView(rg);
      ll.addView(removeBtn);
      ll.addView(v);

    }

    void actionRemoveQuestion(View view){
        //Toast.makeText(getActivity(), view.getId()+" | "+view.getParent(), Toast.LENGTH_LONG).show();
        //View namebar = view.findViewById(view.getId());
        //ViewGroup parent = (ViewGroup) namebar.getParent();

        if (true) {
          final LinearLayout child = (LinearLayout) createEventLL.findViewById(id);
          Toast.makeText(getActivity(), "cCount:"+child.getChildCount()+" | cID:"+child.getId()+" |" +
            " pCount:"+createEventLL.getChildCount()+" | cTAG:"+child.getTag()+" | pID:"+createEventLL.getId(), Toast.LENGTH_LONG).show();
        }
    }
}

1 ответ

  1. Для создания нового LinearlyLayout можно использовать onClickListener для кнопки. Но я получаю вашу проблему вы не сможете ссылаться на него при создании другого дочернего макета для редактирования или удаления его.

    Лучше использовать массив LinearLayout для динамического создания LinearLayout, чтобы можно было ссылаться на них и использовать их позже.

    Код может быть похож на :

    LinearLayout [ ] linearLayout;
    

    При объявлении
    И в onClickListener добавить :

    linearLayout[ ] = new LinearLayout[ ];
    

    Это может быть лучше сделано в цикле for, поскольку он увеличивает счетчик каждый раз, когда кнопка нажата.

    Думаю, этот подход должен сработать.