我需要能够动态添加并从我的ListView
中删除页眉和页脚。动态添加/删除页眉和页脚
所以我用我的页眉和页脚初始化我的活动,然后在某些时候我想隐藏它们,之后我需要添加以前的页眉和页脚,并保持相同的Adapter
。
所以我找到了这个解决方案,但它很丑,我真的希望有另一种方式。
基本上,我必须设置一个空适配器才能够添加标题视图,然后设置一个空适配器来添加页脚视图。为了完成我设置我的真正的适配器。
编辑:我要补充的是使用visibility属性(GONE &可见)这里不是一个解决方案,因为我的中间过程中的页眉页脚&意见一定不能在适配器。
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();
}
}
你有没有解决这个问题?我有类似的需求。 – Vadi 2012-04-15 04:16:44
不,我没有找到比我给出的解决方案更聪明的东西。但至少它有效。 – Chayy 2012-06-15 11:01:15