使用布局xml作为Android中重复内容的模板

时间:2014-03-25 12:57:19

标签: android android-layout android-xml

我有一个模板布局,它代表我应用中ListView中的每一行。 这是photorow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/bodylay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<ImageView
    android:id="@+id/leftbigsquare"
    android:layout_width="0dp"
    android:layout_height="140dp"
    android:layout_weight="1"
    android:background="#1000b0"
    android:src="@drawable/test1"
    />

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#d0b0b0"
        android:textSize="15sp" >

        <ImageView
            android:id="@+id/righttupperleft"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#b170b0"
            android:src="@drawable/test1" />

        <ImageView
            android:id="@+id/rightupperright"
            android:layout_width="0dp"
            android:layout_height="70dp"
            android:layout_weight="1"
            android:background="#b110b0"
            android:src="@drawable/test1" />
    </LinearLayout>

    <ImageView
        android:id="@+id/righthorizontal"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:src="@drawable/test1" />
</LinearLayout>

逐行重复。我想要做的是更改“ImageView”子项,当我从服务器加载图像时,不是每次都重新设计行布局。每行将显示不同的“leftbigsquare”,“rightupperleft”,“rightupperright”,“righthorizo​​ntal”(查看ImageViews ids)照片。

我研究并看到了一些例子,但他们通过硬编码布局来实现这一点,例如:

LinearLayout A = new LinearLayout(this);
    A.setOrientation(LinearLayout.HORIZONTAL); 

我想使用我的photorow.xml作为模板,只需在每行中更改其属性,例如source。 是否可以使用我的photorow.xml作为行的模板?


修改

我的自定义适配器:

package com.example.test2;

import java.util.List;

import com.squareup.picasso.Picasso;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class PhotoAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private List<PhotoRow> rowList;
    Activity context = null;

    public PhotoAdapter(Activity activity, List<PhotoRow> rows) {

        mInflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowList = rows;
        context = activity;
    }

    @Override
    public int getCount() {
        return rowList.size();
    }

    @Override
    public Object getItem(int position) {
        return rowList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View rowView;


        rowView = mInflater.inflate(R.layout.photorow, null);



        //Here I get the ImageView of my photorow xml
        ImageView leftBigSquare = (ImageView) rowView
                .findViewById(R.id.leftbigsquare);


        // Here I get the proper URL from rowList  by using Picasso framework
        Picasso.with(context).load(rowList.get(position).getUrls().get(0))
                .resize(50, 50).centerCrop().into(leftBigSquare);

        //So how can I put the leftBigSquare ImageView to my photorow template with its proper attributes


        return rowView;
    }

}

1 个答案:

答案 0 :(得分:0)

是的,当然,您可以使用相同的rowview XML,并且每行仍然有不同的数据。

您必须使用自定义适配器,然后从该适配器充气您的行,并根据几个条件更改您的数据。

粘贴自定义适配器代码,我将告诉您如何操作。