在哪里放置填充在不同类型的活动中使用的视图的代码

时间:2011-11-28 09:51:55

标签: android android-layout dry

我有一个LinearLayout(listed_venue_item.xml),我用于ListView中的行。我想使用相同的LinearLayout作为我MapView的叠加层。

要在我的MapView上显示listed_venue_item.xml,我在与MapView相同的布局中使用include,它可以正常工作:

<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 :(得分:0)

尝试创建一个类,其中包含场地列表并将自身置于ListView中。

答案 1 :(得分:0)

我把它放在我的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);