我需要能够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)
不要尝试添加/删除页眉/页脚视图.
为了能够动态添加/删除页眉和页脚视图,只需在将适配器设置为页眉和页脚的RelativeLayout之前添加.在此之后,您可以添加/删除您想要的RelativeLayouts.
将RelativeLayouts的大小设置为WRAP_CONTENT.
掠夺
您可以使用以下代码执行相同操作
// to show the footer view
footerView.setVisibility(View.VISIBLE);
// to hide the footer view
footerView.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
您应该使用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)
| 归档时间: |
|
| 查看次数: |
24156 次 |
| 最近记录: |