在xListView中能实现上拉加载和下拉刷新操作,其主要还是应用在list布局中,实现以上效果,而imageSlider则是实现图片的轮播效果,当两者结合起来时,能实现图片和数据都能同时进行刷新,也就是将imageSlider集成到XlistView中,怎样实现呢,看一下下面的代码就好了
XListView方法addHeaderView(View);使用此方法就能够实现集成:(主要代码如下我是使用的fragment类)
private VIew mView;
<span style="font-size:14px;"> /*
* imageSlider控件加入
* */
public View getSliderLayoutView(String[] mImage, final String[] mString) {
if (mView == null){
mView = mInflater.inflate(R.layout.imageslider_layout, null); //解析布局,当加载和刷新是不必重复加载
}
SliderLayout mSliderLayout = (SliderLayout) mView.findViewById(R.id.image_slider_layout);
int length = mImage.length;
for (int i = 0; i < length; i++) {
TextSliderView sliderView = new TextSliderView(getContext()); //向SliderLayout中添加控件
sliderView.image(mImage[i]);
sliderView.description(mString[i]);
final int finalI = i;
sliderView.setOnSliderClickListener(new BaseSliderView.OnSliderClickListener() {
@Override
public void onSliderClick(BaseSliderView slider) {
Toast.makeText(getActivity(),mString[finalI],Toast.LENGTH_SHORT).show();
}
});
mSliderLayout.addSlider(sliderView);
}
mSliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Right_Bottom); //将小圆点设置到右下方
return mView;
}</span>
<span style="font-size:14px;"> @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_news_list_content_layout, container, false);
adapter = new NewsListAdapter(getContext());
mContentList = (XListView) v.findViewById(R.id.news_content_listview);
mProgress = (ProgressBar) v.findViewById(R.id.news_item_progress);
mContentList.setAdapter(adapter); //设置适配器
mContentList.setPullLoadEnable(true); //实现上拉加载
mContentList.setPullRefreshEnable(true); //实现下拉刷新
mContentList.setEmptyView(mProgress); //listview没有加载上时启动
mContentList.setXListViewListener(this); //注册上下拉刷新事件
mContentList.setOnItemClickListener(this); //注册item点击事件
connetHttpGetStr(currentPage); //联网取数据
return v;
}</span>
当到此处时,基本的工作就算做完了,接下来就调用方法就好了
mContentList.addHeaderView(mView);
这样虽然能够添加进去,但是又出问题了,在加载和刷新时imageSlider会出现乱加载的情况,因此在加载前最好进行判断
在获取数据,进行刷新时判断一下
<span style="font-size:14px;"> if (mView != null){
Logs.e("111111111111");
mContentList.removeHeaderView(mView); //加载时移除view
}</span>
同时也可以在addHeadView前做一个判断:(可避免每次都去重新设置数据)
<span style="font-size:14px;"> <pre name="code" class="java"><span style="white-space:pre"> </span>if (mView == null){
Logs.e("222222222222222");
mView = getSliderLayoutView(mImage, mString); //自动轮播加载数据
}</span>
mContentList.addHeaderView(mView);
这样就可以集成到你所想要的位置去了。
还有一种最暴力的方式:若是对XlistView代码熟悉也可以将imageSlider永久集成进去,此种方式我试了一下,是可以的,只要重新设置几个数据就好了,这儿就不做例子了
效果图: