我想知道如何引用视图,如果我以编程方式创建它。
我必须使用"添加乘客">和"删除乘客"按钮创建新的乘客视图到我的应用程序。promts保留了称为"@+id/passenger"的线性布局,其中有两个名为"@+id/passenger_name"和"@+id/passenger_weight"的EditTexts。然后将它们保存在另一个称为passenger_layout的父线性布局中,该布局可以将所有乘客线性布局容纳在一堆
中。添加新乘客很容易,但我不知道如何引用新创建的元素。我想他们会自动获得某种标识符?我希望它们是"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 元素?
创建视图时,请尝试为其提供一些 ID,并将该 ID 作为静态引用保存在某处。
然后,您可以简单地调用包含视图的 findViewById(MY_VIEWS_ID( 并获取视图。
当然,或者,在创建视图时,您始终可以在代码中的某处保留对视图的引用。如果你害怕内存泄漏,你可以使用弱引用。
希望这有帮助。
您可以在 Activity 中维护一个静态变量,该变量将在初始化后包含 UI 元素。
像这样:
// Definition
private static TextView textViewToSave = null;
textViewToSave = // create the TextView programatically.
// Do stuff with the saved TextView
textViewToSave.setText("O Hai world!");