Ajouter / Supprimer un en-tête et pied de page dynamiquement

J'ai besoin d'être en mesure d'ajouter et de supprimer des en-têtes et pieds de page de mon ListView de façon dynamique.

Si j'initialise mon activité avec mon les en-têtes et pieds de page, puis à un certain point, je tiens à les cacher, et plus tard, j'ai besoin d'ajouter de la précédente en-têtes et pieds de page, et garder la même Adapter.

J'ai donc trouvé cette solution, mais c'est moche et j'espère vraiment qu'il y est une autre manière.

En gros, je dois mettre un adaptateur null pour être en mesure d'ajouter l'en-tête de la vue, puis définissez un vide adaptateur pour ajouter le pied de page vue. Pour finir, j'ai mis mon vrai carte.

Edit: je dois ajouter que l'utilisation de l'attribut visibility (PARTI & VISIBLE) n'est pas une solution, parce que les en-têtes et pieds de pages vues ne doit pas être dans l'adaptateur lors de ma procédure intermédiaire.

    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();
}
}
Avez-vous quelque chose à ce sujet? J'ai un besoin similaire.
Non, je n'ai rien trouvé de plus intelligent que la solution que j'ai donné. Mais au moins ça marche.

OriginalL'auteur Chayy | 2012-02-29