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
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>
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.
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.