1

ListViewにデータを渡して、いくつかのレストラン名を表示しています。アイテムをクリックすると、別のアクティビティを開始して、より多くのレストランデータを表示したいと思います。どうすればいいのかわかりません。すべてのレストランデータをバンドルでインテントオブジェクトに渡しますか?または、レストランIDを渡して、他のアクティビティのデータを取得しますか?その場合、他のアクティビティから自分のrestaurantListにアクセスするにはどうすればよいですか?いずれにせよ、クリックしたレストランからデータを取得するにはどうすればよいですか(ビューには名前のみが含まれています)。

どんな助けでも、ポインタは大歓迎です!

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

1 に答える 1

1

他のアクティビティのデータにアクセスすることはできません。リスト内のアイテムをクリックして開始されたアクティビティのデータが必要な場合は、メッセージバンドルを介して新しいアクティビティにデータを渡します。

IDのみを次のアクティビティに渡すと、データベースまたはインターネットからレストランをリロードできますが、最初のアクティビティで使用されたリストからレストランを取得することはできません。

レストランがオブジェクトの作成に重い場合は、独自のアプリケーションサブクラスを実装、レストランリストをこのアプリケーションサブクラスに添付できます。これで、次のようにリストにアクセスできます。

shopList =(YourSubclass)getApplication()。getRestaurantList()

これにより、アプリがバックグラウンドにあり、すべてのアクティビティが一時停止している場合でも、ショップリストがアプリケーションの実行時間のメモリに保存されます。

于 2010-05-18T10:59:41.907 に答える