如何加载布局并将其添加到Android中的其他布局?
问题描述:
我想加载一个布局XML文件并将布局广告到当前的内容视图。如何加载布局并将其添加到Android中的其他布局?
所以,如果我得到这个布局在这里:
,如果我打了硬件搜索按钮,然后我要显示在屏幕顶部的搜索栏,如下所示:
基于this answer,我想是这样的:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.search_bar, null);
ViewGroup layout = (ViewGroup) findViewById(R.id.layout_main);
layout.addView(v);
}
搜索栏名为search_bar.xml布局文件。主要活动是R.layout.activity_main
。 R.id.layout_main
是RelativeLayout
的编号,它是activity_main中的容器。
但我得到了错误膨胀类。
如何加载布局并将其添加到当前加载的布局?
答
我做了一些研究,并将几个提示结合起来。
首先,我用LayoutInflater.from(Context)
而不是Context.LAYOUT_INFLATER_SERVICE
(虽然这似乎不是问题)。其次,我使用了onSearchRequest()
方法。
这是结果:
/**
* Whether the search bar is visible or not.
*/
private boolean searchState = false;
/**
* The View loaded from the search_bar.xml layout.
*/
private View searchView;
/**
* This method is overridden from the Activity class, enabling you to define events when the hardware search button is pressed.
*
* @return Returns true if search launched, and false if activity blocks it.
*/
public boolean onSearchRequested() {
// Toggle the search state.
this.searchState = !this.searchState;
// Find the main layout
ViewGroup viewGroup = (ViewGroup) findViewById(R.id.layout_main);
// If the search button is pressed and the state has been toggled on:
if (this.searchState) {
LayoutInflater factory = LayoutInflater.from(this.activity);
// Load the search_bar.xml layout file and save it to a class attribute for later use.
this.searchView = factory.inflate(R.layout.search_bar, null);
// Add the search_bar to the main layout (on position 0, so it will be at the top of the screen if the viewGroup is a vertically oriented LinearLayout).
viewGroup.addView(this.searchView, 0);
}
// Else, if the search state is false, we assume that it was on and the search_bar was loaded. Now we remove the search_bar from the main view.
else {
viewGroup.removeView(this.searchView);
}
return false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
什么错误?你能给我们提供LogCat吗? – Ahmad 2013-05-05 19:12:26