我正在构建一个应用程序,其中有一个编辑文本字段,并从用户那里获取数据并将其存储在数据库中,它工作正常,现在我使用一个按钮来动态创建另一个编辑文本字段(仅当用户使用时才创建此字段现在,动态创建的字段的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. How to set id programmatically
确定您做错了什么.我只是想做您想做的事,而且行得通.
这是我的活动
类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"/>