web-dev-qa-db-fra.com

Utiliser ListView: Comment ajouter une vue en-tête?

Je regarde l'API ListView et j'ai vu la méthode:

addHeaderView (Voir v)

Ce que je veux faire, c'est avoir une mise en page au-dessus de la liste, est-ce possible?

J'ai essayé de faire quelque chose comme:

  EditText et=new EditText(this);
  et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT,     LayoutParams.WRAP_CONTENT));
  et.setInputType(InputType.TYPE_CLASS_TEXT); 
  addHeaderView(et); //makes app crash

J'ai aussi essayé

setContentView(R.layout.tryview);

mais cela provoque également le blocage de l'application.

L'aide est très appréciée!

Edit : Le code de cette classe est:

public class GroupsActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  String your_array_contents[] = {"a","ab","c"};
  setListAdapter(new ArrayAdapter<String>(this, R.layout.groups_layout, your_array_contents));
  EditText et=new EditText(this);
  et.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
  et.setInputType(InputType.TYPE_CLASS_TEXT); 

  ListView lv = getListView();
  lv.setTextFilterEnabled(true);
  lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

  lv.setAdapter(new ArrayAdapter<String>(GroupsActivity.this,
    Android.R.layout.simple_list_item_multiple_choice, your_array_contents));
    lv.addHeaderView(et); //makes app crash
  lv.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
      // When clicked, show a toast with the TextView text
     // Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
          //Toast.LENGTH_SHORT).show();
    }
  });
}


}
41
Belgi

Vous ne pouvez tout simplement pas utiliser View en tant qu'en-tête de ListView.

Parce que la vue qui est transmise doit être gonflée.

Regardez ma réponse à Android ListView addHeaderView () nullPointerException pour des vues prédéfinies pour plus d'informations.

EDIT:

Regardez ce tutoriel Android ListView et ListActivity - Tutorial .

EDIT 2 : Ce lien est cassé Android ListActivity avec un en-tête ou un pied de page

29
user370305

Vous pouvez ajouter autant d'en-têtes que vous le souhaitez en appelant addHeaderView () plusieurs fois. Vous devez le faire avant de configurer l’adaptateur sur la liste.

Et oui, vous pouvez ajouter un en-tête comme ceci:

LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup)inflater.inflate(R.layout.header, myListView, false);
myListView.addHeaderView(header, null, false);
73
Paresh Mayani

J'ai découvert que gonfler la vue d'en-tête en tant que:

inflater.inflate(R.layout.listheader, container, false);

en tant que conteneur du ViewGroup du fragment, gonfle la tête avec un LayoutParam qui s'étend à partir de FragmentLayout mais ListView s'attend à ce que ce soit plutôt un AbsListView.LayoutParams.

Donc, mon problème a été résolu en gonflant la vue en-tête en passant la liste en tant que conteneur:

ListView list = fragmentview.findViewById(R.id.listview);
View headerView = inflater.inflate(R.layout.listheader, list, false);

puis

list.addHeaderView(headerView, null, false);

Un peu tard, mais j'espère que cela pourra aider quelqu'un

0