我正在尝试将一个Compound Control子类化为我的ListView的HeaderView。我的代码如下:
//使用ListView的活动
protected void onCreate(Bundle savedInstanceState) {
restaurants = new ArrayList<RestaurantModel>();
super.onCreate(savedInstanceState);
setContentView(R.layout.list_view_demo);
Bundle passedInformation = getIntent().getExtras();
if(passedInformation != null){
restaurants = passedInformation.getParcelableArrayList("restaurants");
}
ListAdapter customRowAdapter = new CustomRowAdapter(this, restaurants);
ListView tblView = (ListView)findViewById(R.id.listView2);
HeaderView header = new HeaderView(this);
//View header = getLayoutInflater().inflate(R.layout.header_view,tblView, false);
tblView.addHeaderView(header);
tblView.setAdapter(customRowAdapter);
tblView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
RestaurantModel selectedRestaurant = (RestaurantModel)parent.getItemAtPosition(position);
Intent restaurantDetailView = new Intent(view.getContext(), RestaurantDetailView.class);
restaurantDetailView.putExtra("restaurant", selectedRestaurant);
startActivity(restaurantDetailView);
}
}
);
}
// HeaderView .xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="400dp"
android:background="#fff840c4">
<fragment
android:layout_width="match_parent"
android:layout_height="200dp"
android:name="com.google.android.gms.maps.MapFragment"
android:id="@+id/fragment"
android:layout_gravity="center_horizontal"/>
</RelativeLayout>
// HeaderView .java子类
public class HeaderView extends RelativeLayout {
public HeaderView(Context context){
super(context);
View.inflate(context, R.layout.header_view, this);
}
public HeaderView(Context context, AttributeSet attributes, int defStyle) {
super(context, attributes, defStyle);
View.inflate(context, R.layout.header_view, this);
}
public HeaderView(Context context, AttributeSet attributes){
super(context, attributes);
View.inflate(context, R.layout.header_view, this);
}
}
当列表视图呈现附加的片段时,此代码可以正常工作但不会正确显示我的headerView。相反,headerview占用复合控件中指定的适当大小,但不会呈现控件的任何内容。
但是,当我使用此行作为我的headerView:
时 View header = getLayoutInflater().inflate(R.layout.header_view,tblView, false);
然后headerview工作并正确添加。我敢肯定这可能与我如何膨胀控制有关,但不太确定我缺少什么。我已经阅读了有关复合控件的Android文档,但是有关如何使其工作的任何帮助都将不胜感激。