3 回答
TA贡献1873条经验 获得超9个赞
首先,您需要在创建视图时设置 id。然后你可以尝试获取视图的 id。如何以编程方式设置 id
可以肯定的是,您做错了什么。我只是尝试做你正在尝试的事情并且它有效。这是我的活动
class RootActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_root)
val layout = findViewById<LinearLayout>(R.id.root)
val ed = EditText(this).apply {
hint = "Type here"
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
id = View.generateViewId()
}
layout.addView(ed)
val ed2 = findViewById<EditText>(ed.id)
Log.e("MEEEEEE", ed2.toString())
}
}
这是xml布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
TA贡献1799条经验 获得超8个赞
首先,edittext 用于从用户那里获取数据,并将其存储在 db 中,以便以后更新用户打开相同的活动并在 edittext 中进行更改(其中 edittext 视图是动态创建的),所以我我像那样铸造。
据我了解, EditText ( et1) 最初用于从用户那里获取输入以保存数据。稍后用于查看 EditText ( et1) 用于显示数据。
findViewById()当您已经有 EditText ( et1)的参考时,您不需要在这里。
只需声明EditTextinActivity级别并使用它来获取输入或在视图上显示数据!
示例代码:
EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_name);
}
@Override
protected void onResume() {
super.onResume();
setView();
updateView();
}
private void setView() {
et1 = new EditText(this);
et1.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
et1.setHint("Enter Item Name");
}
private void updateView() {
if (dbHasValues) {
et1.setText("From DB!!");
}
}
TA贡献1850条经验 获得超11个赞
参考:https ://developer.android.com/reference/android/view/View.html
首先你需要设置 id 使用View.generateViewId()
public static int generateViewId ()
生成一个适合在 中使用的值setId(int)
。此值不会与 aapt for 在构建时生成的 ID 值冲突R.id
。
Ex.
et1.setId(View.generateViewId())
请在使用前检查或et1
EditText 对象是否为 Null .....
添加回答
举报