您的位置:首页 > 移动开发 > Android开发

Android--------多条目展示数据(一种类型只有一个图片,另一种有两个图片)将图片缓存到SD卡

2017-06-26 19:57 423 查看
首先布局:
item1(只有一个图片的)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>

<ImageView
android:id="@+id/image_view1"
android:layout_width="200dp"
android:layout_height="200dp" />

<LinearLayout
android:layout_width="190dp"
android:layout_height="200dp"
android:orientation="vertical"
>

<TextView
android:id="@+id/title1"
android:layout_width="190dp"
android:layout_height="100dp"
android:text="fdsdfsd"/>

<TextView
android:id="@+id/id1"
android:layout_width="190dp"
android:layout_height="100dp"
android:text="fdsdfsd"/>
</LinearLayout>
</LinearLayout>

item2(有两个图片的)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal">

<ImageView
android:id="@+id/image_view2"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_weight="1"/>
<ImageView
android:id="@+id/image_view22"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_weight="1"/>
</LinearLayout>
<TextView
android:id="@+id/title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ssssssss"/>

</LinearLayout>
 
题目要求:
根据type等于1,item显示一张图片,type等于2,item显示两张图片,图片路径根据 pic 中的 “|” 分割

适配器类(多条目展示,并用imageLoader加载图片,缓存到SD卡)
public class Myadapter extends BaseAdapter {
private ArrayList<News.ListBean> mlist;
private Context mcontext;
//定义样式常量,注意常量值要从0开始
private final int type1=0;
private  final int type2=1;
private ImageLoader imageloader;
private DisplayImageOptions options;
public Myadapter(Context mcontext,ArrayList<News.ListBean> list) {

this.mcontext = mcontext;
this.mlist=list;
//创建默认的ImageLoader配置参数
//  ImageLoaderConfiguration configuration = ImageLoaderConfiguration
//     .createDefault(mcontext);

//将configuration配置到imageloader中
imageloader= ImageLoader.getInstance();
//设置缓存到SD路径
File file=new File(Environment.getExternalStorageDirectory(),"HAHA");
if (!file.exists()){
file.mkdirs();
}
ImageLoaderConfiguration con=new ImageLoaderConfiguration.Builder(mcontext)
.diskCache(new UnlimitedDiskCache(file))
.build();

imageloader.init(con);

options=new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.bitmapConfig(Bitmap.Config.ARGB_8888)
.showImageOnLoading(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher)
.build();
/*
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.ic_stub)            //加载图片时的图片
.showImageForEmptyUri(R.drawable.ic_empty)         //没有图片资源时的默认图片
.showImageOnFail(R.drawable.ic_error)              //加载失败时的图片
.cacheInMemory(true)                               //启用内存缓存
.cacheOnDisk(true)                                 //启用外存缓存
.considerExifParams(true)                          //启用EXIF和JPEG图像格式
.displayer(new RoundedBitmapDisplayer(20))         //设置显示风格这里是圆角矩形
.build();
*/

//加载图片最重要的一行代码
//  imageloader.displayImage(bean.getImgSrc(),holder.image,options);
}

//手动重写的方法
@Override
public int getItemViewType(int position) {
//   return super.getItemViewType(position);
//获得类型  type2为有两个图片的那种类型  type1为一个图片的类型
//
return mlist.get(position).getType()==1?type1:type2;

}

//手动重写的方法
@Override
public int getViewTypeCount() {
return 2;
}

@Override
public int getCount() {

return mlist==null?0:mlist.size();
}

@Override
public Object getItem(int position) {

return mlist.get(position);
}

@Override
public long getItemId(int position) {

return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
int type = getItemViewType(position);
//对convertView进行判空
if (convertView==null){
vh=new ViewHolder();
//对类型的分类
if (type==type1) {
//类型一为只有一个图片的情况,选中布局为item1,并找到该布局中的ID

convertView = View.inflate(mcontext, R.layout.item1, null);
vh.title = (TextView) convertView.findViewById(R.id.title1);
vh.id = (TextView) convertView.findViewById(R.id.id1);
vh.iv = (ImageView) convertView.findViewById(R.id.image_view1);
}else if(type==type2) {

//类型二是文字和两个图片的情况,选中布局为item2,并找到该布局中的ID
convertView = View.inflate(mcontext, R.layout.item2, null);
vh.title = (TextView) convertView.findViewById(R.id.title2);
vh.iv = (ImageView) convertView.findViewById(R.id.image_view2);
vh.iv1=(ImageView)convertView.findViewById(R.id.image_view22);

}
//设置标签
convertView.setTag(vh);
}else{
//得到标签
vh=(ViewHolder)convertView.getTag();
}
//得到该类,当是类型2的时候加载图片,
News.ListBean news = mlist.get(position);
//如果是两个图片的类型首先得到图片,然后拆分字符串最后用imageloader加载图片
if (type==type2) {
vh.title.setText(news.getTitle());
String pic= news.getPic();
String[] urls = pic.split("\\|");
if (urls.length>=2){
imageloader.displayImage(urls[0],vh.iv,options);
imageloader.displayImage(urls[1],vh.iv1,options);
}

// Glide.with(mcontext).load(news.getPic()).into(vh.iv);
// Glide.with(mcontext).load(news.getPic()).into(vh.iv1);
}else if (type==type1){
vh.title.setText(news.getTitle());
vh.id.setText(news.getId()+"");
// Glide.with(mcontext).load(news.getPic()).into(vh.iv);
imageloader.displayImage(news.getPic(),vh.iv,options);
}
return convertView;
}

class ViewHolder{
ImageView iv,iv1;
TextView title;
TextView id;
}
}

---------------------------------------------------------------------------------------------------

点击listview条目弹出对话框显示点击条目的信息
//xlistview条目的点击事件
mxv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

//因为点击后显示一个图片,所以自己写一个图片的布局 imageload,找到id
  View v = View.inflate(MainActivity.this, R.layout.imageload, null);
ImageView iv=(ImageView)v.findViewById(R.id.imageload);
if (position>0&&position<mlist.size()){
Glide.with(MainActivity.this).load(mlist.get(position-1).getPic()).into(iv);
}

AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this)

.setView(v)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();

}
});

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐