Actuellement, j'ai une classe qui étend la classe ListActivity. Je dois pouvoir ajouter quelques boutons statiques au-dessus de la liste qui sont toujours visibles. J'ai essayé de récupérer ListView à l'aide de getListView () depuis la classe. Ensuite, j'ai utilisé addHeaderView (View) pour ajouter une petite mise en page en haut de l'écran.
Header.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" >
<Button
Android:id="@+id/testButton"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Income"
Android:textSize="15dip"
Android:layout_weight="1" />
</LinearLayout>
Avant de configurer l'adaptateur, je le fais:
ListView lv = getListView();
lv.addHeaderView(findViewById(R.layout.header));
Il en résulte que rien ne se passe dans ListView, à part qu'il soit rempli à partir de ma base de données. Aucun bouton n'apparaît au dessus.
Une autre approche que j'ai essayée consiste à ajouter un rembourrage en haut de ListView. Lorsque j’ai fait cela, il a été déplacé avec succès, cependant, si j’en ai ajouté un au-dessus, il a poussé le ListView. Quoi que je fasse, il semble que je ne puisse pas mettre quelques boutons au-dessus de ListView lorsque j'ai utilisé ListActivity.
Merci d'avance.
synic, j’ai essayé votre suggestion précédemment. Je l'ai réessayé juste pour des raisons de santé mentale, et le bouton ne s'est pas affiché. Vous trouverez ci-dessous le fichier de présentation de l'activité et le code que j'ai implémenté dans oncreate ().
// My listactivity J'essaie d'ajouter l'en-tête à
public class AuditActivity extends ListActivity {
Budget budget;
@Override
public void onCreate(Bundle savedInstanceState) {
Cursor test;
super.onCreate(savedInstanceState);
setContentView(R.layout.audit);
ListView lv = getListView();
LayoutInflater infalter = getLayoutInflater();
ViewGroup header = (ViewGroup) infalter.inflate(R.layout.header, lv, false);
lv.addHeaderView(header);
budget = new Budget(this);
/*
try {
test = budget.getTransactions();
showEvents(test);
} finally {
}
*/
// switchTabSpecial();
}
Layout.xml pour l'activité:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
<ListView Android:id="@Android:id/list" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<TextView Android:id="@Android:id/empty" Android:layout_width="wrap_content"
Android:layout_height="wrap_content" Android:text="@string/empty" />
</LinearLayout>
findViewById()
ne fonctionne que pour trouver des sous-vues de l'objet View. Cela ne fonctionnera pas sur un identifiant de mise en page.
Vous devrez utiliser layout inflater pour convertir le fichier XML en ses composants View correspondants. Quelque chose comme ça:
ListView lv = getListView();
LayoutInflater inflater = getLayoutInflater();
View header = inflater.inflate(R.layout.header, lv, false);
lv.addHeaderView(header, null, false);
Je ne sais pas pourquoi votre code n'a pas simplement généré une erreur. findViewById()
retournait probablement juste null
et aucun en-tête n'a été ajouté à votre liste.
Voici la solution la plus simple:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background">
<include layout="@layout/actionbar"/>
<ListView
Android:id="@+id/tasklist_TaskListView"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
Android:textColor="@color/baseFont"/>
<include layout="@layout/bottombar"/>
</LinearLayout>
ou
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@color/background">
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
<ListView
Android:id="@+id/tasklist_TaskListView"
Android:layout_width="fill_parent"
Android:layout_height="0dip"
Android:layout_weight="1"
Android:textColor="@color/baseFont"/>
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>
</LinearLayout>
au lieu de bouton, vous pouvez ajouter une autre mise en page linéaire horizontale
Après quelques recherches, j'ai pu comprendre que mélanger TableLayout et LinearLayout au sein de mon document XML ListActivity m'a permis d'ajouter un en-tête au document. Ci-dessous, mon document XML si quelqu'un est intéressé à le voir. Bien que l’approche de Synic soit probablement la bonne après le travail avec sa solution, j’ai été incapable de la faire fonctionner comme je le voulais.
AuditTab.Java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audittab);
getListView().setEmptyView(findViewById(R.id.empty));
}
audittab.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
Android:layout_width="fill_parent"
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_height="fill_parent">
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_gravity="center_horizontal">
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="horizontal"
Android:layout_weight="1">
<Button
Android:id="@+id/btnFromDate"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text=""
Android:layout_weight="1" />
<Button
Android:id="@+id/btnToDate"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text=""
Android:layout_toRightOf="@+id/btnFromDate"
Android:layout_weight="1" />
<Button
Android:id="@+id/btnQuery"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Query"
Android:layout_toRightOf="@+id/btnToDate"
Android:layout_weight="1" />
</LinearLayout>
</TableRow>
<TableRow
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_gravity="center_horizontal">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<ListView
Android:id="@Android:id/list"
Android:layout_width="300dip"
Android:layout_height="330dip"
Android:scrollbars="none" />
<TextView
Android:id="@+id/empty"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:paddingTop="10dip"
Android:text="- Please select a date range and press query." />
</LinearLayout>
</TableRow>
</TableLayout>
AuditItem.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:orientation="horizontal"
Android:padding="10sp">
<TextView
Android:id="@+id/transactionDateLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Date: " />
<TextView
Android:id="@+id/transactionDate"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_toRightOf="@id/transactionDateLabel" />
<TextView
Android:id="@+id/transactionTypeLabel"
Android:layout_below="@id/transactionDate"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Type: " />
<TextView
Android:id="@+id/transactionType"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dip"
Android:layout_below="@id/transactionDate"
Android:layout_toRightOf="@id/transactionTypeLabel" />
<TextView
Android:id="@+id/transactionAmountLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="10dip"
Android:text="Amount: "
Android:layout_below="@id/transactionDate"
Android:layout_toRightOf="@id/transactionType" />
<TextView
Android:id="@+id/transactionAmount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionDate"
Android:layout_toRightOf="@id/transactionAmountLabel" />
<TextView
Android:id="@+id/transactionCategoryLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Category: "
Android:layout_below="@id/transactionAmountLabel" />
<TextView
Android:id="@+id/transactionCategory"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionAmountLabel"
Android:layout_toRightOf="@id/transactionCategoryLabel"
/>
<TextView
Android:id="@+id/transactionToAccountLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="To Account: "
Android:layout_below="@id/transactionCategoryLabel" />
<TextView
Android:id="@+id/transactionToAccount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@+id/transactionCategoryLabel"
Android:layout_toRightOf="@id/transactionToAccountLabel" />
<TextView
Android:id="@+id/transactionFromAccountLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="From Account: "
Android:layout_below="@id/transactionToAccountLabel" />
<TextView
Android:id="@+id/transactionFromAccount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionToAccountLabel"
Android:layout_toRightOf="@id/transactionFromAccountLabel" />
<TextView
Android:id="@+id/transactionNoteLabel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Note: "
Android:layout_below="@id/transactionFromAccountLabel" />
<TextView
Android:id="@+id/transactionNote"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_below="@id/transactionFromAccountLabel"
Android:layout_toRightOf="@id/transactionNoteLabel" />
<Button
Android:id="@+id/editTransactionBtn"
Android:layout_width="wrap_content"
Android:layout_height="40sp"
Android:visibility="gone"
Android:text="Edit"
Android:layout_below="@id/transactionNoteLabel"/>
<Button
Android:id="@+id/deleteTransactionBtn"
Android:layout_width="wrap_content"
Android:layout_height="40sp"
Android:text="Delete"
Android:layout_below="@+id/transactionNoteLabel"
Android:visibility="gone"
Android:layout_toRightOf="@+id/editTransactionBtn"
Android:ellipsize="end"/>
</RelativeLayout>
La réponse ListView ci-dessus est utile mais fait défiler la liste et ne conserve pas les graphiques d'en-tête en haut. La meilleure solution que j'ai trouvée consiste à définir un titre personnalisé pour l'activité. Voici à quoi ressemble mon constructeur:
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.your_listview_layout);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.your_header);
...
Où your_listview_layout.xml configure un ListView et your_header.xml contient la disposition d'en-tête personnalisée de votre choix. Notez simplement que les trois lignes ci-dessus doivent être appelées exactement dans cet ordre pour ne pas causer de problèmes d'exécution.
Le tutoriel qui m'a aidé était http://www.londatiga.net/it/how-to-create-custom-window-title-in-Android/ et vous pouvez trouver de nombreuses pages en rapport avec le débordement de pile en effectuant une recherche. pour le terme "setFeatureInt"
L'ajout d'un en-tête statique est simple. Créez simplement une vue relative distincte dont l'attribut alignParentTop (ou bottom, right ou left) est défini sur true.