2010-05-18 30 views
1

我将数据传递给ListView以显示一些餐厅名称。现在,当点击某个项目时,我想开始另一项活动以显示更多餐馆数据。我不知道如何去做。我是否应该通过意向对象将所有餐馆数据传递给捆绑销售商?或者我应该通过餐厅ID并从其他活动中获取数据?在那种情况下,我如何从其他活动访问我的restaurantList?无论如何,我怎样才能从我点击的餐厅(视图只包含名称)获取数据?如何通过Android中的任何活动访问未存储在数据库中的数据?

任何帮助,指针欢迎!

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; 
    } 
} 

回答

1

您不能从其他活动中访问数据。如果您需要通过单击列表中的项目启动的活动中的数据,请将其通过消息包传递给新活动。

如果您只将ID传递给下一个活动,您可以从数据库或互联网上重新加载餐厅,但无法从第一个活动使用的列表中重新获取它。

如果餐馆很繁重创建对象,您可以实现自己的application subclass并将餐馆列表附加到此应用程序子类。现在,您可以访问列表是这样的:

shopList =(YourSubclass)getApplication()getRestaurantList()

这将导致内存的shoplist是你的应用程序的沃尔运行时,即使应用程序是在后台并且所有活动都暂停。