调用removeView后在View上使用addView

时间:2014-04-30 18:38:47

标签: java android xml layout view

我想要动态添加和删除TextView,具体取决于EditText中的文本。我目前正确地开始使用removeView删除,但是当我尝试调用addView时,它会抛出NullPointerException,假设因为TextView在删除后为null?

以下是我的代码:

final TextView tagsText = (TextView)postDialogLayout.findViewById(R.id.newPostTagsText);
//remove since start with no tags
((LinearLayout)tagsText.getParent()).removeView(tagsText);

if(currentTags.equals("Tags: <font color='#33B5E5'></font>") && tagsText.isShown())
    ((LinearLayout)tagsText.getParent()).removeView(tagsText);
else if(!currentTags.equals("Tags: <font color='#33B5E5'></font>") && !tagsText.isShown())
    //this line below throws the NullPointerException
    ((LinearLayout)tagsText.getParent()).addView(tagsText);

当调用最后一行时,我可以告诉它在正确的时间被调用,应用程序崩溃并抛出nullpointerexception。读取视图的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

如果要隐藏View,您可以通过设置可见性来更简单地做到这一点,有三种可见的可见性值:

  • View.VISIBLE - 这意味着View可见。
  • View.INVISIBLE - 这意味着View不可见,但仍然是布局的一部分。
  • View.GONE - 这意味着View不可见,不再影响布局。

在您设置的情况下,ViewsView.VISIBLE的{​​{1}}可见性似乎正是您所寻找的。

您可以像这样设置可见性:

View.GONE

textView.setVisiblity(View.VISIBLE);

答案 1 :(得分:-1)

您将需要创建一个新的TextView,因为您声明了第一个TextView final。如果你在else if语句中添加一个额外的行,它应该工作:

else if (!currentTags.equals("Tags: <font color='#33B5E5'></font>") && !tagsText.isShown()) {
    //this line below throws the NullPointerException
     final TextView tagsText1 = (TextView)postDialogLayout.findViewById(R.id.newPostTagsText);
    ((LinearLayout)tagsText.getParent()).addView(tagsText1);
}