动态添加/删除页眉和页脚

Cha*_*ayy 8 android listview

我需要能够ListView动态地添加和删​​除页眉和页脚.

所以我用我的页眉和页脚初始化我的活动,然后在某些时候我想隐藏它们,后来我需要添加以前的页眉和页脚,并保持相同Adapter.

所以我找到了这个解决方案,但它很难看,我真的希望还有另外一种方法.
基本上,我必须设置一个空适配器才能添加标题视图,然后设置一个空适配器来添加页脚视图.为了完成我设置我的真正适配器.

编辑:我必须补充一点,使用visibility属性(GONE&VISIBLE)不是解决方案,因为在我的中间过程中,页眉和页脚视图不能在适配器中.

    public class TestAdapterHeader extends ListActivity implements OnClickListener {
        private static String[] items = { "test 1", "test 2", "test 3", "test 4",
                "test 5", "test 6", "test 7", "test 8", "test 9", "test 10",
                "test 11", "test 12", "test 13", "test 14", "test 15", "test 16",
                "test 17", "test 18", "test 19", "test 20" };

        private ArrayAdapter mAdapter;
        private LinearLayout mParentView;
        private TextView mHeaderView, mFooterView;

        private boolean mViewsHidden = false;


        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            initViews();

            mAdapter = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, items);
            setListAdapter(mAdapter);
        }


        private void initViews() {
            // The main layout
            mParentView = new LinearLayout(this);
            mParentView.setOrientation(LinearLayout.VERTICAL);
            mParentView.setBackgroundColor(Color.BLACK);

            // The button to hide the views
            Button hideViewsButton = new Button(this);
            hideViewsButton.setText("Add/Remove views");
            hideViewsButton.setOnClickListener(this);

            // The listview
            ListView listView = new ListView(this);
            listView.setId(android.R.id.list);
            listView.setCacheColorHint(Color.TRANSPARENT);

            mParentView.addView(hideViewsButton);
            mParentView.addView(listView);

            // Set the content view
            setContentView(mParentView);

            AbsListView.LayoutParams lp = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 150);

            mHeaderView = new TextView(this);
            mHeaderView.setTextColor(Color.WHITE);
            mHeaderView.setBackgroundColor(Color.BLUE);
            mHeaderView.setGravity(Gravity.CENTER);
            mHeaderView.setLayoutParams(lp);
            mHeaderView.setText("Header");

            mFooterView = new TextView(this);
            mFooterView.setTextColor(Color.WHITE);
            mFooterView.setBackgroundColor(Color.BLUE);
            mFooterView.setGravity(Gravity.CENTER);
            mFooterView.setLayoutParams(lp);
            mFooterView.setText("Footer");


            getListView().addHeaderView(mHeaderView);
            getListView().addFooterView(mFooterView);
        }


        @Override
        public void onClick(View v) {
            mViewsHidden = !mViewsHidden;

            // Remove header & footer views
            if (mViewsHidden) {
                getListView().removeHeaderView(mHeaderView);
                getListView().removeFooterView(mFooterView);
            } 
            else {
                // Remove the ListAdapter to be able to add our headerView
                setListAdapter(null);
                getListView().addHeaderView(mHeaderView);

                // Set an empty ListAdapter to be able to add our footerView
                setListAdapter(new ArrayAdapter<String>(TestAdapterHeader.this, -1));
                getListView().addFooterView(mFooterView);

                // Re set our Adapter
                setListAdapter(mAdapter);
            }

            mParentView.requestLayout();

        }
    }
Run Code Online (Sandbox Code Playgroud)

Har*_*rry 8

不要尝试添加/删除页眉/页脚视图.

为了能够动态添加/删除页眉和页脚视图,只需在将适配器设置为页眉和页脚的RelativeLayout之前添加.在此之后,您可以添加/删除您想要的RelativeLayouts.

将RelativeLayouts的大小设置为WRAP_CONTENT.

掠夺

  • 是不是将适配器滚动ListView设置到顶部?这是一种古怪的效果.怎么避免呢?顺便说一句.每个人都应该感谢谷歌这样精彩的API ...... :( (2认同)

Man*_*esh 6

您可以使用以下代码执行相同操作

// to show the footer view
footerView.setVisibility(View.VISIBLE); 

// to hide the footer view    
footerView.setVisibility(View.GONE); 
Run Code Online (Sandbox Code Playgroud)


Vya*_*kin 2

您应该使用view.setVisibility(int visibility)View.GONE、View.VISIBLE 或 View.INVISIBLE

        ....
        if (mViewsHidden) {
            mHeaderView.setVisibility(View.GONE);
            mFooterView.setVisibility(View.GONE);
        } 
        .... 
        else {
            mHeaderView.setVisibility(View.VISIBLE);
            mFooterView.setVisibility(View.VISIBLE);
        } 
        .... 
Run Code Online (Sandbox Code Playgroud)