Android 充气GUI只工作一次,为什么?
我是Android开发新手 我有一些活动,我希望向其中添加一些GUI元素Android 充气GUI只工作一次,为什么?,android,android-layout,layout-inflater,Android,Android Layout,Layout Inflater,我是Android开发新手 我有一些活动,我希望向其中添加一些GUI元素 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_dial_details); if (android.os.Build.VERSION.SDK_INT >= 11)
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dial_details);
if (android.os.Build.VERSION.SDK_INT >= 11)
// Show the Up button in the action bar.
getActionBar().setDisplayHomeAsUpEnabled(true);
inflateNewRow();
inflateNewRow();
}
private void inflateNewRow()
{
LinearLayout thisLayout = (LinearLayout) findViewById(R.id.dial_details_layout);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Before edit!
//inflater.inflate(R.layout.dialitem_details, thisLayout);
// After edit, which works!
inflater.inflate(R.layout.dialitem_details, null);
thisLayout.addView(ll);
}
第一次调用InflatenerRow将添加行,很好。第二个电话,似乎什么也没做!没有例外,没有添加任何行
我添加了setVisibility调用,只是为了确保。这没什么区别
两次调用InflatenerRow可能看起来很奇怪,但实际上只是针对这个例子。它将在onCreate中调用一次,然后从菜单单击事件。不过,这个简单的例子重现了这个问题
这是要添加的小视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:ems="10"
android:inputType="number" >
<requestFocus />
</EditText>
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
为此:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/dial_details_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".DialDetailsActivity" >
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="number" >
<requestFocus />
</EditText>
</LinearLayout>
知道为什么只显示/添加第一行吗?当您调用此函数一次时,LinearLayout会创建一次,但当您再次调用时,它已经存在,不是吗? 因此,如果您不创建ll,只需编写
inflater.inflate(R.layout.dialitem_details, thisLayout);
而不是
LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.dialitem_details, thisLayout);
你应该会得到想要的结果
无需为每个项目设置可见性为true谢谢您的回答。我试过你的建议。不幸的是,这没有什么区别。我已经根据您的建议更新了问题中的代码。@kaze我误解了您的要求,您还需要将子视图添加到视图组中。这是一个示例,应该会有所帮助。谢谢。你的第二个链接让我找到了解决问题的正确方向。我会将您的答案标记为正确,并更新代码示例以使其正常工作!