web-dev-qa-db-fra.com

Y at-il un exemple super simple List/ListAdapter là-bas pour Android

J'ai un service Web qui renvoie une liste d'objets très simple.

MyObject [] data = webServiceCall ();

MonObjet a 1 champ que je veux afficher, "Name" (i.e. data[0].Name)

Comment puis-je transformer cela en une activité qui répertorie simplement le nom de ces objets dans une listActivity à défilement sur Android. Je suis vraiment confus avec les curseurs et je ne suis pas sûr d’avoir besoin de curseurs et je ne suis pas sûr du type d’adaptateur à implémenter (BaseAdapter, SimpleAdapter etc.) 

Donc je suppose que je cherche trois choses, 

l'activité, l'adaptateur et le layout.xml 

Juste essayer de comprendre ce truc Android, certainement un noob ici

20
slim

je pense donc que je l'ai compris avec un peu d'inspiration de la réponse de RobGThai. Je publie le code pour que tout le monde puisse le voir. Je suppose que je n'ai pas vraiment utilisé d'adaptateur personnalisé.

C’est l’exemple très simple qui m’a lancé. Une fois que j’ai eu cela, je me suis assuré que mon "MyObject" avait une méthode toString () dessus pour s’afficher correctement dans la liste et j’ais passé le tableau MyObject [] dans le "nouveau "ArrayAdapter" au lieu de listItems

FooList.Java

import Android.app.ListActivity;
import Android.os.Bundle;
import Android.widget.ArrayAdapter;

public class FooList extends ListActivity {
    String[] listItems = {"item 1", "item 2 ", "list", "Android", "item 3", "foobar", "bar", }; 
    @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.temp);
         setListAdapter(new ArrayAdapter(this,  Android.R.layout.simple_list_item_1, listItems));
     }

}

la mise en page xml que j'ai utilisée (temp.xml)

<?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">
    <ListView Android:id="@Android:id/list" Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" />
    <TextView Android:id="@Android:id/empty" Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" Android:text="Empty set" />
</LinearLayout>
44
slim

rendre votre activité étend également ListActivity.

Ensuite, cela devrait vous aider à démarrer. 

Object[] sArray = {"This", "is", 3.5, true, 2, "for", "bla"};
ArrayAdapter adp = new ArrayAdapter(this, Android.R.layout.simple_list_item_1, sArray);
setListAdapter(adp);

Les deuxièmes paramètres peuvent être modifiés à votre disposition préférée. Voir le document API pour plus d'informations.

10
RobGThai

Vous pouvez également attacher une AlertDialog à la ListView lorsque l'utilisateur clique sur une ListItem. J'inclus un code de travail ci-dessous au cas où quelqu'un essaierait la même chose,

final ListView v = getListView();
v.setOnItemClickListener(new OnItemClickListener() {

public void onItemClick(final AdapterView<?> parentView, View view, int position,
        long id) {
    final String fileName = (String) parentView.getItemAtPosition(position);
    new AlertDialog.Builder(parentView.getContext()).setTitle("Upload").setMessage("Upload " + fileName +"?")
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface di, int arg1) {
                //do something here...
            }
        }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface di, int arg1) {
                di.dismiss();                           
            }
        }).show();
}   
});

La clé est que vous devez transmettre le contexte de votre activité englobante à la boîte de dialogue. J'ai découvert cela lorsque getApplicationContext() a échoué avec un message d'erreur étrange. 

1
barryku