2010-05-18 7 views
1

Je passe des données à un ListView pour afficher certains noms de restaurants. Maintenant, lorsque vous cliquez sur un article, j'aimerais commencer une autre activité pour afficher plus de données sur les restaurants. Je ne suis pas sûr de la façon de le faire. Dois-je transmettre toutes les données du restaurant dans un paquet à travers l'objet d'intention? Ou dois-je simplement passer l'identifiant du restaurant et obtenir les données dans l'autre activité? Dans ce cas, comment puis-je accéder à ma liste de restaurants de l'autre activité? Dans tous les cas, comment puis-je obtenir des données du restaurant sur lequel j'ai cliqué (la vue ne contient que le nom)?Comment accéder aux données non stockées dans une base de données à partir de n'importe quelle activité dans Android?

Toute aide, pointeurs bienvenus!

ListView lv= (ListView)findViewById(R.id.listview); 

lv.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,restaurantList.getRestaurantNames())); 

lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

     Intent i = new Intent(Atable.this, RestaurantEdit.class); 
     Bundle b = new Bundle(); 
     //b.putInt("id", ?); 
     startActivityForResult(i, ACTIVITY_EDIT); 
    } 
}); 

RestaurantList.java

package org.digitalfarm.atable; 
import java.util.ArrayList; 
import java.util.List; 

public class RestaurantList { 

    private List<Restaurant> restaurants = new ArrayList<Restaurant>(); 

    public List<Restaurant> getRestaurants() { 
     return this.restaurants; 
    } 

    public void setRestaurants(List<Restaurant> restaurants) { 
     this.restaurants = restaurants; 
    } 

    public List<String> getRestaurantNames() {  

     List<String> restaurantNames = new ArrayList<String>(); 

     for (int i=0; i<this.restaurants.size(); i++) { 
      restaurantNames.add(this.restaurants.get(i).getName()); 
     } 

     return restaurantNames; 
    } 
} 

Restaurant.java

package org.digitalfarm.atable; 

public class Restaurant { 

    private int id; 
    private String name;   
    private float latitude; 
    private float longitude; 

    public int getId() { 
     return this.id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    }  

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public float getLatitude() { 
     return this.latitude; 
    } 

    public void setLatitude(float latitude) { 
     this.latitude = latitude; 
    } 

    public float getLongitude() { 
     return this.longitude; 
    } 

    public void setLongitude(float longitude) { 
     this.longitude = longitude; 
    } 
} 

Répondre

1

Vous ne pouvez pas accéder aux données d'autres activités. Si vous avez besoin de données dans l'activité démarrée en cliquant sur l'élément dans la liste, passez-la à la nouvelle activité via l'ensemble de messages.

Si vous transmettez uniquement l'ID à l'activité suivante, vous pouvez recharger le restaurant à partir d'une base de données ou d'Internet, mais vous ne pouvez pas le récupérer dans la liste utilisée dans la première activité.

Si les restaurants sont lourds pour créer des objets que vous pourriez implémenter vous possédez application subclass et joindre la liste de restaurants à cette sous-classe d'application. Maintenant, vous pouvez accéder à la liste comme ceci:.

Shoplist = (YourSubclass) getApplication() getRestaurantList()

Cela se traduirait par votre Shoplist étant dans la mémoire du moteur d'exécution wohl de votre application, même si l'application est en arrière-plan et toutes les activités sont en pause.

Questions connexes