Agregar / Eliminar encabezado y pie de página dinámicamente
Necesito poder agregar y eliminar encabezados y pies de página de miListView
dinámicamente.
Así que inicializo mi actividad con mis encabezados y pies de página, luego en algún momento quiero ocultarlos, y luego necesito agregar los encabezados y pies de página anteriores, y mantener el mismoAdapter
.
Así que encontré esta solución, pero es fea y realmente espero que haya otra manera.
Básicamente, tengo que configurar un adaptador nulo para poder agregar la vista de encabezado y luego configurar un adaptador vacío para agregar la vista de pie de página. Para terminar configuro mi adaptador real.
Edit: Debo agregar que usar el atributo de visibilidad (GONE & VISIBLE) no es una solución aquí, porque las vistas de encabezados y pies de página no deben estar en el adaptador durante mi procedimiento intermedio.
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;
priv,ate 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();
}
}