我知道这个话题并不是什么新鲜事,但我真的很难接受这个并尝试了很多答案,但我仍然不能说清楚我应该写什么,在哪里写和使用。
我有这个布局文件 settings.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
...
<TextView
android:id="@+id/pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="7dp"
android:layout_marginTop="10dp"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/pass_del"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="7dp"
android:layout_marginTop="7dp"
android:text="Удалить пароль"
android:textAppearance="?android:attr/textAppearanceMedium" />
...
</LinearLayout>
我想以编程方式添加TextView passdel
。其onCreate
描述为passdel=(TextView) findViewById(R.id.pass_del);
我有这些方法
public void onPasSet() {
pass.setText("Сменить пароль");
((LinearLayout)passdel.getParent()).addView(passdel);
}
public void onPasDel() {
pass.setText("Установить пароль");
((LinearLayout)passdel.getParent()).removeView(passdel);
}
onPasDel
效果很好。
我猜Java采用当前的布局。因此,当我删除View
时,它就在这个布局上。当我尝试添加此View
时,Java会尝试在当前布局中找到此视图,但它已被删除,因此..nullpointerexception。我该如何正确编写所有addView
内容?如何指出所需的布局?
答案 0 :(得分:2)
为什么需要删除/添加此View
?如果我正确理解了这个组件的目标,最好的方法就是隐藏/显示它:
passdel.setVisibility(View.GONE);
passdel.setVisibility(View.VISIBLE);
当然,在您从passdel
移除ViewGroup
后,它已经没有父母了,所以在尝试拨打{{1}时您将获得NPE
在onPasSet()
答案 1 :(得分:0)
正如您所建议的,getParent()
无法正常运行in TextView
未实例化。
你应该以不同的方式获得布局。
您可以findViewById(R.id.layout.id)
完成此操作。
实施例: 在XML中:
<LinearLayout
...
android:id="@+id/my_layout">
...
活动:
LinearLayout ll = (LinearLayout) findViewById(R.id.my_layout);
ll.addView(myView);