子类ListView HeaderView问题

时间:2015-05-08 17:56:04

标签: java android listview android-5.0-lollipop

我正在尝试将一个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文档,但是有关如何使其工作的任何帮助都将不胜感激。

0 个答案:

没有答案