ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-动态创建的视图id始终为null-findviewbyid不起作用

2019-12-11 02:01:39  阅读:285  来源: 互联网

标签:android-edittext java dynamic-view


我正在构建一个应用程序,其中有一个编辑文本字段,并从用户那里获取数据并将其存储在数据库中,它工作正常,现在我使用一个按钮来动态创建另一个编辑文本字段(仅当用户使用时才创建此字段现在,动态创建的字段的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"/>

标签:android-edittext,java,dynamic-view
来源: https://codeday.me/bug/20191211/2105822.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有