где разместить код, который заполняет представление, которое используется в различных видах деятельности - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть LinearLayout (перечисленный_venue_item.xml), который я использую для строк в ListView.Я хотел бы использовать тот же LinearLayout в качестве наложения для моего MapView.

Чтобы отобразить list_venue_item.xml поверх моего MapView, я использую include в том же макете, что и мой MapView, и этоработает нормально:

<include
    android:id="@+id/mapVenueItemLayout"
    layout="@layout/listed_venue_item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
/>

Но теперь, чтобы заполнить представления внутри включенного макета, у меня есть дублирующий код: первый в моем VenueArrayAdapter, который расширяет ArrayAdapter,и второй в моем классе, который расширяет MapActivity.

Так что мне интересно, куда поместить код, который заполняет venue_layout.

Мое лучшее предположение - мой класс Venue, который содержит один экземпляр объекта:

public class Venue {
    public int venue_id;
    public String name;
    public String image_code;
    // snipped several fields for brevity

    public String toString() {
        return "venue: " + name;
    }

    public static class VenueRowHolder {
        ImageView logo_image=null;
        TextView name=null;
        String logo_code;
        int id;

        VenueRowHolder(View base) {
            this.logo_image=(ImageView)base.findViewById(R.id.venueLogo);
            this.name=(TextView)base.findViewById(R.id.venueName);
        }
    }
}

Где я должен поставить код?Внутри Venue?Внутри Venue.VenueRowHolder?где-то еще вообще?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я положил это в мой VenueRowHolder:

public class VenueRowHolder {
    public ImageView logo_image=null;
    public TextView name=null;
    public TextView address=null;
    public String logo_code;
    public int id;

    public VenueRowHolder(View base) {
        this.logo_image=(ImageView)base.findViewById(R.id.venueLogo);
        this.name=(TextView)base.findViewById(R.id.venueName);
        this.address=(TextView)base.findViewById(R.id.address);
    }

    public void loadVenue(Venue _venue) {
        loadVenue(_venue,false);
    }

    public void loadVenue(Venue _venue, boolean load_image_now) {
        String url = "";
        if(load_image_now) {
            url = _venue.logo_code + ".png";
        }
        BitmapManager.B.loadBitmap(url, logo_image, ImageWidth(), ImageHeight());

        id = _venue.venue_id;
        logo_code = _venue.logo_code;
        name.setText(_venue.name);
        address.setText(_venue.address);
    }
}

и затем, когда мне нужно загрузить место в View, я делаю что-то вроде этого:

        View _venue = findViewById(R.id.listed_venue_item);

        VenueRowHolder holder = (VenueRowHolder)_venue.getTag();

        if(holder == null) {
            holder = new VenueRowHolder(_venue);
            _venue.setTag(holder);
        }

        holder.loadVenue(_venue);
0 голосов
/ 28 ноября 2011

Попробуйте создать класс, который содержит список объектов и помещает себя в ListView.

...