您的位置:首页 > 其它

Listview添加头和尾,addHeader,addFooter,以及利用尾显示更新过程

2015-09-10 19:10 387 查看
首先说一下,因为头和尾都是独立的xml,而且并没有在xml总进行include,所以这里实例化的话会稍微麻烦一点,上代码

private void initView() {

scorll_linearlayout = (LinearLayout) getActivity().findViewById(R.id.scorll_linearlayout);
index_indicator_background = (LinearLayout) getActivity().findViewById(R.id.index_indicator_background);
ptrl = ((PullToRefreshLayout) getActivity().findViewById(R.id.refresh_homepage_view));
ptrl.setOnRefreshListener(new MyListener());
listView = (ListView) getActivity().findViewById(R.id.homepage_listview);

indexListViewAdapter = new IndexListViewAdapter(getActivity(), indexListViewBeanList);
indexListViewAdapter.update();
listView.addHeaderView(LayoutInflater.from(getActivity()).inflate(R.layout.item_index_header, null));

listview_inflater=LayoutInflater.from(getActivity());
item_listview_footer=listview_inflater.inflate(R.layout.item_listview_footer, null);

listView.addFooterView(item_listview_footer);

listview_progress=(ProgressBar)item_listview_footer.findViewById(R.id.listview_progress);
listview_footer = (TextView) item_listview_footer.findViewById(R.id.listview_footer);
((TextView) item_listview_footer.findViewById(R.id.listview_footer)).setText("上拉加载更多");

listView.setAdapter(indexListViewAdapter);

listView.setFocusable(true);
listView.setOnItemClickListener(new IndexOnItemClickListener());

index_record = (ImageView) getActivity().findViewById(R.id.index_record);
index_record.setOnClickListener(this);
}
下面是头的操作

Handler handler3 = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
jsonArray = (JSONArray) msg.obj;
L.d("handler中的jsonarray", jsonArray.toString());
if (jsonArray.length() != 0) {
for (int i = 0; i < jsonArray.length(); i++) {
try {
RollScreenBean rollScreenBean = new RollScreenBean(null, null, null, null, null, null, null, null, null, null);
JSONObject rollScreenBeanItem = jsonArray.getJSONObject(i);
rollScreenBean.setIndex(rollScreenBeanItem.getString("index"));
rollScreenBean.setRollScreenTitle(rollScreenBeanItem.getString("rollscreen_title"));
rollScreenBean.setTitle(rollScreenBeanItem.getString("title"));
rollScreenBean.setRollScreenImage(BaseUrl + rollScreenBeanItem.getString("rollscreen_image"));
rollScreenBean.setImage(BaseUrl + rollScreenBeanItem.getString("image"));
rollScreenBean.setVideoId(rollScreenBeanItem.getString("videoid"));
rollScreenBean.setVideoUrl(rollScreenBeanItem.getString("url"));
rollScreenBean.setGoodNumber(Integer.parseInt(rollScreenBeanItem.optString("praise_num")) + "");
rollScreenBean.setCollectNumber(Integer.parseInt(rollScreenBeanItem.optString("collect_num")) + "");
rollScreenBeanList.add(rollScreenBean);
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
index_view_header = (RelativeLayout) getActivity().findViewById(R.id.index_view_header);
index_view_header.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.getStackTrace();
}
initPagerView();
} else {
LayoutInflater.from(getActivity()).inflate(R.layout.item_index_header, null).setVisibility(View.GONE);
}
break;
}
}
};

private void initPagerView() {

view_pager = (ViewPager) getActivity().findViewById(R.id.index_view_pager);
List<View> list = new ArrayList<View>();
inflater = LayoutInflater.from(getActivity());
for (int i = 0; i < jsonArray.length(); i++) {
item = inflater.inflate(R.layout.item_index_image, null);
((TextView) item.findViewById(R.id.index_scorll_text)).setText(rollScreenBeanList.get(i).getRollScreenTitle());
((TextView) item.findViewById(R.id.index_scorll_text)).bringToFront();
list.add(item);
}

adapter = new MyAdapter(list);
view_pager.setAdapter(adapter);

view_pager.setOnPageChangeListener(new ScorllListener());

initIndicator();
ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor();
ViewPagerTask pagerTask = new ViewPagerTask();
scheduled.scheduleAtFixedRate(pagerTask, 4, 4, TimeUnit.SECONDS);
}

private class ViewPagerTask implements Runnable {
@Override
public void run() {
currPage = (currPage + 1) % jsonArray.length();
handler4.sendEmptyMessage(0);
}
}

Handler handler4 = new Handler() {
public void handleMessage(Message msg) {
view_pager.setCurrentItem(currPage);
}

};

private void initIndicator() {
indicator_imgs = new ImageView[jsonArray.length()];
ImageView imgView;
View v = getActivity().findViewById(R.id.index_indicator);

for (int i = 0; i < jsonArray.length(); i++) {
imgView = new ImageView(getActivity());
LinearLayout.LayoutParams params_linear = new LinearLayout.LayoutParams(15, 15);
params_linear.setMargins(10, 15, 10, 15);
imgView.setLayoutParams(params_linear);
indicator_imgs[i] = imgView;
if (i == 0) {
indicator_imgs[i].setBackgroundResource(R.drawable.indicator_focused);
} else {
indicator_imgs[i].setBackgroundResource(R.drawable.indicator);
}
((ViewGroup) v).addView(indicator_imgs[i]);
}

}

private class MyAdapter extends PagerAdapter {

private List<View> mList;

private AsyncImageLoader asyncImageLoader;

public MyAdapter(List<View> list) {
mList = list;
asyncImageLoader = new AsyncImageLoader();
}

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

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mList.get(position));

}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}

@Override
public Object instantiateItem(final ViewGroup container, final int position) {

Drawable cachedImage = asyncImageLoader.loadDrawable(rollScreenBeanList.get(position).getRollScreenImage(), new AsyncImageLoader.ImageCallback() {

public void imageLoaded(Drawable imageDrawable, String imageUrl) {

View view = mList.get(position);
image = ((ImageView) view.findViewById(R.id.index_scorll_img));
image.setBackgroundDrawable(imageDrawable);
container.removeView(mList.get(position));
container.addView(mList.get(position));
}
});

View view = mList.get(position);
image = ((ImageView) view.findViewById(R.id.index_scorll_img));
image.setBackgroundDrawable(cachedImage);
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread oadThread = new Thread(new postThread(rollScreenBeanList.get(position).getVideoId(), "play"));
oadThread.start();
Intent intent = new Intent(getActivity(), VideoViewPlayingActivity.class);
intent.putExtra("url_info", rollScreenBeanList.get(position).getVideoUrl());
intent.putExtra("id_info", rollScreenBeanList.get(position).getVideoId());
intent.putExtra("title_info", rollScreenBeanList.get(position).getTitle());
intent.putExtra("image_info", rollScreenBeanList.get(position).getImage());
intent.putExtra("good_info", rollScreenBeanList.get(position).getGoodNumber());
intent.putExtra("collect_info", rollScreenBeanList.get(position).getCollectNumber());
startActivity(intent);
}
});

container.removeView(mList.get(position));
container.addView(mList.get(position));
return mList.get(position);

}

}

private class ScorllListener implements ViewPager.OnPageChangeListener {

@Override
public void onPageScrollStateChanged(int state) {
if (state == 0) {
}
}

@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override
public void onPageSelected(int position) {

for (int i = 0; i < indicator_imgs.length; i++) {

indicator_imgs[i].setBackgroundResource(R.drawable.indicator);

}
indicator_imgs[position].setBackgroundResource(R.drawable.indicator_focused);
}

}

static class AsyncImageLoader {

private HashMap<String, SoftReference<Drawable>> imageCache;

public AsyncImageLoader() {
imageCache = new HashMap<String, SoftReference<Drawable>>();
}

public interface ImageCallback {
public void imageLoaded(Drawable imageDrawable, String imageUrl);
}

public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) {

if (imageCache.containsKey(imageUrl)) {
SoftReference<Drawable> softReference = imageCache.get(imageUrl);
Drawable drawable = softReference.get();
if (drawable != null) {
imageCallback.imageLoaded(drawable, imageUrl);
return drawable;
}
}

final Handler handler = new Handler() {
public void handleMessage(Message message) {
imageCallback.imageLoaded((Drawable) message.obj, imageUrl);
}
};

new Thread() {
@Override
public void run() {
Drawable drawable = loadImageFromUrl(imageUrl);
imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
Message message = handler.obtainMessage(0, drawable);
handler.sendMessage(message);
}
}.start();

return null;
}

public Drawable loadImageFromUrl(String url) {

try {
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000 * 15);
HttpGet get = new HttpGet(url);
HttpResponse response;

response = client.execute(get);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
HttpEntity entity = response.getEntity();
Drawable d = Drawable.createFromStream(entity.getContent(), "src");
return d;
} else {
return null;
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return null;
}

public void clearCache() {

if (this.imageCache.size() > 0) {

this.imageCache.clear();
}

}

}
下面是尾的操作

public void onLoadMore(final PullToRefreshLayout pullToRefreshLayout) {
new Handler() {
@Override
public void handleMessage(Message msg) {
Thread lodeMore = new Thread(new LoadMore());
lodeMore.start();
listview_progress.setVisibility(View.VISIBLE);
listview_footer.setText("正在加载中。。。");
handler1 = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
if (!msg.obj.equals("0") && !msg.equals(MaxId)) {
indexUrlBeanList.addAll(indexUrlBeanList_more);
L.d("indexurlbeanlist的长度", indexUrlBeanList.size() + "");
L.d(indexUrlBeanList.toString());
indexListViewBeanList.addAll(indexListViewBeanList_loadmore);
indexListViewAdapter.update();
listview_progress.setVisibility(View.GONE);
listview_footer.setText("上拉加载");
pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.SUCCEED);
}
break;
case 1:
pullToRefreshLayout.loadmoreFinish(PullToRefreshLayout.FAIL);
listview_footer.setText("请检查网络状态");
T.showShort(getActivity(), "请检查网络状态");
break;
}
}
};
}
}.sendEmptyMessageDelayed(0, 500);


说一下其中的重点在哪

listview_inflater=LayoutInflater.from(getActivity());
item_listview_footer=listview_inflater.inflate(R.layout.item_listview_footer, null);

listView.addFooterView(item_listview_footer);

listview_progress=(ProgressBar)item_listview_footer.findViewById(R.id.listview_progress);
listview_footer = (TextView) item_listview_footer.findViewById(R.id.listview_footer);
((TextView) item_listview_footer.findViewById(R.id.listview_footer)).setText("上拉加载更多");


需要自己去定义一个view,还有layoutinflater,然后在此基础上进行界面的更新操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: