我想在同一个listview中膨胀两个xml

时间:2014-04-20 15:42:37

标签: android xml android-listview

我想把这个设计放在mi xml中。首先是一个标题和一个图片一次,然后很多行显示有关照片的信息。我的问题是,当我选择第一行时将所有内容放入RelativeLayout时,我选择了照片,标题和第一行。因此我必须在主要元素(Photo和header)和其他xml中放入两个xml所有行。我如何在Listview中充气两个xml?我不知道如何做到这一点。

我无法发布图片,因此结构将是:

(listview中的一项) 1)HEADER和PHOTO不重复 2)ROWS - 多行

将标题放入listview的一行。因为我想在每张照片中添加评论,每张照片可能不止一张。

我拥有相同的xml,但是使用这种格式时我点击了一行时遇到了问题。

照片和用户详细信息只能显示一次,行取决于每张照片,有多行照片。因此,我认为最好的选择是做两个xml文件并从java代码中膨胀它,但我不知道这样做。如果有人有另一个最好的选择将被接受。

我的getView代码如下:

public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        ViewHolder holder;

        Object repeat = MyArrList.get(position).get("Repeat");

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int height = metrics.heightPixels;
        int width = metrics.widthPixels;

        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = inflater.inflate(R.layout.activity_column, null);

            holder = new ViewHolder();

            holder.imageView = (ImageView) convertView.findViewById(R.id.ColImgPath);

            //Userdetails
            holder.tvU = (TextView) convertView.findViewById(R.id.tvU);
            holder.tvUN = (TextView) convertView.findViewById(R.id.tvUN);
            holder.ivProfilePhoto = (ImageView) convertView.findViewById(R.id.profilephoto);

            //Accessory details
            holder.tvN = (TextView) convertView.findViewById(R.id.tvN);
            holder.tvB = (TextView) convertView.findViewById(R.id.tvB);
            holder.tvP = (TextView) convertView.findViewById(R.id.tvP);
            holder.tvS = (TextView) convertView.findViewById(R.id.tvS);

            convertView.setTag(holder);

        }
        else{
            holder = (ViewHolder) convertView.getTag();
        }

        holder.imageView.setPadding(5, 5, 5, 5);
        holder.imageView.setRotation(90);

        if(repeat.equals("1")){

            holder.imageView.setVisibility(View.VISIBLE);

            holder.tvU.setVisibility(View.VISIBLE);
            holder.tvUN.setVisibility(View.VISIBLE);
            holder.tvU.setText(MyArrList.get(position).get("U").toString());
            holder.tvUN.setText(MyArrList.get(position).get("UN").toString());

        }
        else {
            //If the photo_id is repeated these params are not shown
            holder.tvU.setVisibility(View.GONE);
            holder.tvUN.setVisibility(View.GONE);
            holder.imageView.setVisibility(View.GONE);

        }

        try {
            Bitmap bmp = ((Bitmap) MyArrList.get(position).get("ImageThumBitmap"));

            Bitmap photobitmap1 = Bitmap.createScaledBitmap(bmp, width/2, height/2, true);
            holder.imageView.setImageBitmap((Bitmap) MyArrList.get(position).get("Photo"));

        } catch (Exception e) {
            // When Error
            holder.imageView.setImageResource(android.R.drawable.ic_menu_report_image);
        }

        holder.tvN.setPadding(20, 0, 0, 0);
        holder.tvN.setText(MyArrList.get(position).get("N").toString());

        holder.tvB.setPadding(20, 0, 0, 0);
        holder.tvBsetText(MyArrList.get(position).get("B").toString());

        holder.tvP.setPadding(20, 0, 0, 0);

        holder.tvP.setText(MyArrList.get(position).get("P").toString());

        holder.tvS.setPadding(20, 0, 0, 0);
        holder.tvS.setText(MyArrList.get(position).get("S").toString());

        return convertView;

    }

1 个答案:

答案 0 :(得分:-1)

更好的是你可以将Header放在一个单独的Xml中并将其添加到ListView Header中,如下所示

init listView
inflate header and add it to the list
set any adapter to listView (!!!)
set listView adapter