【问题标题】:Implement multiple layout in list view Android在列表视图Android中实现多个布局
【发布时间】:2016-05-26 01:03:34
【问题描述】:

嗨,我正在尝试在文件类型来自 webservices 的列表视图中实现多重布局,任何人都可以建议如何完成任务提前谢谢下面是我的代码,我已经实现了下面的适配器,但在视图中给出了 null

适配器

package kbs.com.dynamiclistview;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;

import java.util.ArrayList;

/**
* Created by user on 2/13/2016.
*/
public class MyCustomAdapter extends BaseAdapter {

    ArrayList<Bean> slist = new ArrayList<Bean>();
    Context context;


    public MyCustomAdapter(ArrayList<Bean> slist, Context context) {
        this.slist = slist;
        this.context = context;
    }

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

    @Override
    public Object getItem(int i) {
        return slist.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        final Bean bean = slist.get(i);
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (view == null) {
            if (slist.get(i).getFiletype().equalsIgnoreCase("TEXT")) {

                System.out.println("In if text :--" + bean.getFiletype());


                view = inflater.inflate(R.layout.textlayout, viewGroup, false);

                TextView itemname = (TextView) view.findViewById(R.id.itemname);

                itemname.setText(bean.filetext);

            }

            if (slist.get(i).getFiletype().equalsIgnoreCase("IMAGES")) {

                //   LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.imglayout, viewGroup, false);
                System.out.println("In if image :--" + bean.getFiletype());

                ImageView img = (ImageView) view.findViewById(R.id.img);


                ImageLoader imageLoader = ImageLoader.getInstance();

                imageLoader.init(ImageLoaderConfiguration.createDefault(context));
                DisplayImageOptions option = new DisplayImageOptions.Builder().displayer(new RoundedBitmapDisplayer(1000)).cacheInMemory(true)
                        .cacheOnDisc(true).resetViewBeforeLoading(true)
                        .showImageForEmptyUri(R.mipmap.ic_launcher)
                        .showImageOnFail(R.drawable.close)
                        .showImageOnLoading(R.drawable.images).bitmapConfig(Bitmap.Config.RGB_565).build();


                imageLoader.displayImage(bean.getFileurl(), img, option);


            }

        }
        return view;
    }
}

【问题讨论】:

标签: android android-layout listview layout


【解决方案1】:

您可以在示例下使用 getViewTypeCount 方法:

@Override
public int getViewTypeCount() {
    return 2;
}

然后我们要实现根据位置值选择布局类型分配给行的逻辑:

@Override public int getItemViewType(int position) 
{
 return (contactList.get(position).getContactType() == ContactType.CONTACT_WITH_IMAGE) ? 0 : 1; 
} 

您可以在 getView 中查看类型视图

int type = getItemViewType(position);

更多信息此链接sample

【讨论】:

  • 谢谢.. 但我想要一些例子
猜你喜欢
  • 1970-01-01
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多