参考Android中以编程方式创建的UI元素

时间:2013-10-02 10:55:22

标签: android user-interface xamarin

如果我以编程方式创建View,我想知道如何引用View。

我必须使用"添加乘客"创建新的乘客视图。分别"删除乘客"按钮到我的应用程序。保证LinearLayouts被称为" @ + id / passenger"它有两个EditTexts叫做#34; @ + id / passenger_name"和" @ + id / passenger_weight"。然后将它们保存在名为passenger_layout的另一个父LinearLayout中,该行可以将所有乘客LinearLayout保存在一堆

添加新乘客很容易,但我不知道如何参考新创建的元素。我猜他们会自动获得某种标识符?我更喜欢他们是" passenger_name%"和" passenger_weight%",其中%是索引_passengerCount。

addPassenger.Click += delegate {
            //Add to index
            ++passengerCount;
            //Prep new passenger layout
            var newLayout = new LinearLayout(Activity);
            //Set LayoutParameters from the existing passenger LayoutParameters
            newLayout.LayoutParameters = newPassenger.LayoutParameters;

            //Prep the new EditTexts
            var name = new EditText(Activity);
            var weight = new EditText(Activity);

            //Set the EditTexts' LayoutParameters from existing LayoutParameters
            name.LayoutParameters = new ViewGroup.LayoutParams(passengerName.LayoutParameters);
            weight.LayoutParameters = new ViewGroup.LayoutParams(passengerWeight.LayoutParameters);

            //These cleary don't work :<
//              name.Id = Resources.GetIdentifier( "passenger_name" + passengerCount, "id", Activity.PackageName);
//              weight.Id = "passenger_weight" + passengerCount;


            //Add EditTexts to the new passenger layout and then and then add the new passenger to the parent LinearLayout 
            newLayout.AddView(name);
            newLayout.AddView(weight);
            passengerLayout.AddView(newLayout);
            Log.Debug(GetType().FullName, "Add clicked");
        };

这是我的点击代表,以创建一个新的乘客,但即使我像这样创建他们,我也不知道如果我必须删除它们或获得名称或重量后我怎么能找到它们数据

如何引用以编程方式创建的UI元素?

2 个答案:

答案 0 :(得分:1)

创建视图时,请尝试为其提供一些ID,并将该ID作为静态引用保存在某处。

然后,您只需调用包含视图的findViewById(MY_VIEWS_ID)并获取视图。

当然,或者,您可以在创建代码时始终保持对代码中创建的视图的引用。如果您害怕内存泄漏,可以使用WeakReference。

希望这有帮助。

答案 1 :(得分:0)

您可以在Activity中维护一个静态变量,该变量在初始化后将包含UI元素。

类似的东西:

// Definition
private static TextView textViewToSave = null;

textViewToSave = // create the TextView programatically.

// Do stuff with the saved TextView
textViewToSave.setText("O Hai world!");