0

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

我必须使用“添加乘客”和“删除乘客”按钮分别为我的应用程序创建新的乘客视图。promts 保存为名为“@+id/passenger”的线性布局,其中有两个名为“@+id/passenger_name”和“@+id/passenger_weight”的 EditText。然后将它们保存在另一个名为passenger_layout的父LinearLayout中,它可以将所有乘客LinearLayouts放在一堆中

添加新乘客很容易,但我不知道如何引用新创建的元素。我猜他们会自动获得某种标识符?我希望它们是“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 元素?

4

2 回答 2

1

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

然后,您可以简单地调用包含视图的 findViewById(MY_VIEWS_ID) 并获取视图。

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

希望这可以帮助。

于 2013-10-02T10:59:55.687 回答
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!");
于 2013-10-02T11:02:39.327 回答