我需要动态地添加和删除我的
所以我找到了这个解决方案,但它很丑陋,我真的希望有其他方法。
基本上,我必须设置一个空适配器才能添加头视图,然后设置一个空适配器来添加脚视图。最后我设置我的真正的适配器。
编辑:我必须补充说明,在我的中间过程中,使用可见性属性(GONE和VISIBLE)不是一个解决方案,因为头部和底部视图在适配器中不能存在。
ListView
的头部和底部。因此,我在活动中初始化我的头部和底部,然后在某个时候我想要隐藏它们,稍后我需要添加以前的头部和底部,并保持相同的Adapter
。所以我找到了这个解决方案,但它很丑陋,我真的希望有其他方法。
基本上,我必须设置一个空适配器才能添加头视图,然后设置一个空适配器来添加脚视图。最后我设置我的真正的适配器。
编辑:我必须补充说明,在我的中间过程中,使用可见性属性(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();
}
}