java - 动态创建的视图 ID 始终为空 - findviewbyid 不起作用
问题描述
我正在构建一个应用程序,其中我有一个编辑文本字段并从用户那里获取数据并将其存储在数据库中它工作正常,现在我使用一个按钮来动态创建另一个编辑文本字段(此字段仅在用户创建希望通过使用按钮单击),现在动态创建的字段的 id 始终为 null 并显示错误。我将分享我的代码。
对于动态编辑文本:
//update start
final LinearLayout ll = (LinearLayout) findViewById(R.id.li1);
mContext = getApplicationContext();
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
//update end
et1 = new EditText(AddTask.this);
et1.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT));
et1.setHint("Enter Item Name");
et1.setId(View.generateViewId());
//updates
layout.addView(et1, params1);
ll.addView(layout);
访问它:
EditText item_name = (EditText) findViewById(et1.getId());
运行应用程序时,我在这一行出现错误,就像这样。
日志猫:
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException:
Attempt to invoke virtual method 'int android.widget.EditText.getId()' on a null object reference
更新:
我也试过这种方法,仍然没有用,伙计们,
EditText item_name = (EditText) findViewById(getResources().getIdentifier(String.valueOf(et1.getId()), "id", getPackageName()));
(此处数据是使用此代码插入到数据库中的,但在尝试查看数据时,应用程序崩溃了。)
解决方案
首先,您需要在创建视图时设置 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"/>
推荐阅读
- r - 如何使用 for 循环在数据框中查找特定字符串?
- javascript - 使用 barba.js 进行页面转换后 JavaScript 文件不加载
- python - 在 Python 中使用堆栈实现深度优先树遍历
- c# - 0002 字符串值在使用 ExcelDataReader 转换为 DataTable 时被截断为 2
- python - 使用 pyinstaller systeminfo 后不会生成输出
- javascript - 在Codeigniter模式中将变量从Javascript传递到href
- c - 结构中数组的大小
- css - 使叠加层出现在父 div 上,但在该 div 的子级下方
- python - 正则表达式的模糊匹配
- c# - 使用右箭头键更新相机位置