【问题标题】:Get ID for views that are added dynamically获取动态添加的视图的 ID
【发布时间】:2013-03-26 13:48:33
【问题描述】:

如何获取布局中动态添加的View的ID?

   public class Display 
    {

        static int i;
        Dynamic_UIActivity dyn;
        private Context context;
        View mField= null;
        TextView text;
        protected int mYear;
        protected int mMonth;
        protected int mDay;
        LinearLayout ll;
        Mynewdialog dialognew;

        public Display(Context mcontext)
        {
            context=mcontext;
            ll = new LinearLayout(mcontext);
            ll.setOrientation(LinearLayout.VERTICAL);
            dyn = new Dynamic_UIActivity();
       }

       public void addLabel(String text)
       {
        TextView textview = new TextView(context);
        textview.setText(text);
        ll.addView(textview);       
        }

        public void addField(String Type,String Tag)
        {
            mField.setId(i);
            i++;
            if(Type.equalsIgnoreCase("text"))
           {
                mField= new EditText(context);
                mField.setTag(Tag);
                //int id = mField.getResources().getIdentifier((String) mField.getTag(),"id" ,dyn.getPackageName());
                //EditText edit = (EditText)mField.findViewById(1);
                ll.addView(mField);
            }
            if(Type.equalsIgnoreCase("datepicker"))
            {
                mField=new EditText(context);
                ((EditText) mField).setText("Pick Date");
                ll.addView(mField);
                mField.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v) 
                    {
                        dialognew = new Mynewdialog(context);
                         dialognew.dialog_obj((EditText) mField);
                    }
                });
            } 
        }   

        protected DatePickerDialogWithEditText.OnDateSetListener mdatepickerdialog = new DatePickerDialogWithEditText.OnDateSetListener()
        {
            public void onDateSet(DatePicker view , int year , int month, int date)
             {
                  mYear = year;
                  mMonth = month;
                 mDay = date;
                 dialognew.showdialogtext();

             }
         };
     }

     class DatePickerDialogWithEditText extends DatePickerDialog 
     {
         EditText tv;    

         DatePickerDialogWithEditText(Context c, OnDateSetListener oD, int y, int m, int d, EditText tv) 
        {
             super(c, oD, y, m, d);
             this.tv = tv;
        }

         EditText getAssociatedTextView() 
         {
             return tv;
         }
    }


      class Mynewdialog 
     {
        private Context context;
        Display dis = new Display(context);
        private DatePickerDialogWithEditText dialog;

        public Mynewdialog(Context mcontext)
        {
            context=mcontext;       
        }

        public void dialog_obj(EditText editTextView)
        {
             final Calendar cal = Calendar.getInstance();
             dis.mYear = cal.get(Calendar.YEAR);
             dis.mMonth = cal.get(Calendar.MONTH);
             dis.mDay = cal.get(Calendar.DAY_OF_MONTH);
             dialog = new DatePickerDialogWithEditText(context, dis.mdatepickerdialog, dis.mYear, dis.mMonth, dis.mDay, editTextView);
            dialog.show();
        }

         public void showdialogtext()
        {
             EditText et = dialog.getAssociatedTextView();
             et.setText(new StringBuilder().append(dis.mDay).append("-").append(dis.mMonth).append("-").append(dis.mYear));
         }  
       }

现在我想设置通过检查类型获得的视图的 ID?我该怎么做?

【问题讨论】:

  • 使用 setid 和 getid mtds
  • 但我们不知道必须为其设置 Id 的视图类型?
  • 现在如何获取和设置我在运行时添加的视图的 ID??

标签: android


【解决方案1】:

您可以使用 View 的 getId() 和 setId() 方法来完成。

例如:

TextView txtView = new TextView(this);
txtView.setId(4);

您可以使用 getId() 方法获取 ID:

txtView.getId();

【讨论】:

  • 作为旁注,动态(通过代码)创建的视图最初没有设置 id。您必须显式调用 setId() 才能为视图提供 Id。
  • @MrJre 我已经提到它作为示例的 setId(4)。
  • @Geetanjali 仅供参考,Id 参数是整数类型。
  • 那我该如何使用 findviewbyid 呢?
  • 实际上我已经在运行时添加了文本视图、日期选择器和编辑文本,并且首先要设置它们的 ID,我们应该知道我们要为其设置 ID 的视图类型是什么?怎么能我们这样做?
【解决方案2】:

或者您可以在 ArrayList 中添加所有(动态创建的)视图,然后访问它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2012-06-16
    • 2017-12-14
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    相关资源
    最近更新 更多