ListView,ScrollView,RecyclerView被HorizontalScrollView嵌套,加载图片
2016-03-21 20:20
615 查看
最近一直看图片加载。因为外面套着一层HorizontalScrollView,所以刚刚开始用ListView的时候,效果不是很理想,会因为要计算ListView和每个Item的高度,重复调用getView(),导致刚开始position的位置总是0,然后才开始变成0,1,2,3...
方法一:
所以我又换了一种办法,使用ScrollView。布局文件如下:
为什么要放LinearLayout呢?因为放图片需要一个容器。
方法二:
RecyclerView,是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把viewholder的实现封装起来,用户只要实现自己的viewholder就可以了,该组件会自动帮你回收复用每一个item。不多说,代码奉上:
XML:
Adapter:
上面有什么不对的地方,请指出。还是实习生
方法一:
所以我又换了一种办法,使用ScrollView。布局文件如下:
<span style="white-space:pre"> </span><ScrollView android:id="@+id/imgage_scroll_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="@dimen/product_detail_margin_top" android:fadeScrollbars="false" android:focusable="false" android:scrollbarStyle="outsideInset" android:scrollbarThumbVertical="@drawable/evaluation_scroll_bar"> <LinearLayout android:id="@+id/image_linear_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/detail_web_bg" android:focusable="false" android:orientation="vertical" android:paddingBottom="@dimen/product_detail_margin_top"></LinearLayout> </ScrollView>
为什么要放LinearLayout呢?因为放图片需要一个容器。
<span style="white-space:pre"> </span>for (int i = position; i < position + count; i++) { if (i == mImageList.size()) break; String url = mImageList.get(i); //为LineraLayout设置一个图片地址TAG, // 下拉到当前界面时,可以直接加载当前页面的图片 ImageView imageView = (ImageView) mImageLinearLayout .findViewWithTag(url); if (!url.startsWith(Constants.HOST)) url = Constants.HOST + url; ImageListener listener = ImageLoader.getImageListener(imageView, 0, 0); ImageContainer container = mImageLoader.get(url, listener, Tools.converToCompatiblePx(mParentActivity, 790), Tools.converToCompatiblePx(mParentActivity, 340)); mImageContainers.add(container); }这个方法可以了,但是当图片过多,过大,会报OOM的错误(Out Of Memory :内存占有量超过VM所分配的)。
方法二:
RecyclerView,是support-v7包中的新组件,是一个强大的滑动组件,与经典的ListView相比,同样拥有item回收复用的功能,但是直接把viewholder的实现封装起来,用户只要实现自己的viewholder就可以了,该组件会自动帮你回收复用每一个item。不多说,代码奉上:
XML:
<android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent"/>Activity:
public class MyActivity extends Activity { private RecyclerView mRecyclerView; private RecyclerView.Adapter mAdapter; private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_activity); mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); // improve performance if you know that changes in content // do not change the size of the RecyclerView mRecyclerView.setHasFixedSize(true); // use a linear layout manager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); // specify an adapter (see also next example) mAdapter = new MyAdapter(myDataset); mRecyclerView.setAdapter(mAdapter); } ... }
Adapter:
public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.ViewHolder> { private Context mContext; private LayoutInflater mInflater; private List<String> mImageList; RequestQueue mQueue; public GalleryAdapter(Context context,List<String> list) { Log.e("GalleryAdapter",list.toString()); this.mContext = context; this.mImageList = list; this.mInflater = LayoutInflater.from(context); mQueue = Volley.newRequestQueue(mContext); } public static class ViewHolder extends RecyclerView.ViewHolder{ public ViewHolder(View itemView) { super(itemView); } ImageView mImageView; } @Override public GalleryAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.productdetail_list_item,parent,false); ViewHolder viewHolder = new ViewHolder(view); viewHolder.mImageView = (ImageView) view.findViewById(R.id.productdetail_list_image); return viewHolder; } @Override public void onBindViewHolder(GalleryAdapter.ViewHolder holder, int position) { String url = mImageList.get(position); Glide.with(mContext) .load(url) .placeholder(R.drawable.detail_web_bg) .into(holder.mImageView); } @Override public int getItemCount() { return mImageList.size(); } }
上面有什么不对的地方,请指出。还是实习生
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories