您的位置:首页 > 其它

ListView动态加载图片以及分段加载数据

2012-07-27 19:10 417 查看
package com.xxxxx.sns.application.friend;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.Window;

import android.view.View.OnClickListener;

import android.view.inputmethod.InputMethodManager;

import android.widget.AbsListView;

import android.widget.AdapterView;

import android.widget.Button;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.ProgressBar;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.AbsListView.OnScrollListener;

import android.widget.AdapterView.OnItemClickListener;

/**

 * 全站会员

 * 

 * @author Administrator

 * 

 */

public class AllMemberActivity extends Activity implements OnClickListener,
OnItemClickListener {

private List<SimpleUser> allMemberList;// 全站好友
private AllMemberListAdaterView allMemberListAdater;// 全站适配器

private ListView friendListView;// 全站好友列表
private Button backButton;// 返回按钮
private Button sortButton;// 排序按钮
private Button searchButton;//查询按钮
private EditText searchEditText;//查询KEY
private Button findFriendButton;// 找好友按钮
private TextView titleTextView;//全站会员标题

private LayoutInflater mLayoutInflater;
private LinearLayout footView;// 底部
private LinearLayout footTextLayout;// 点击
private TextView footTextView;// 文字
private ProgressBar footProgressBar;// 进度条
private boolean isLoading = false;// 当前是否在加载 false 没有
private int sortIn = SNSParam.ORDER_DEFAULT;

// private ComparatoSortUDefualtumber sortDefual = new ComparatoSortUDefualtumber();// 默认排序

// private ComparatoSortUHYNumber sortOnLineCount = new ComparatoSortUHYNumber();// 活跃°

// private ComparatoSortUFRNumber sortFriendCount = new ComparatoSortUFRNumber();// 好友数

// private ComparatoSortUVisiNumber sortSpaceViCount = new ComparatoSortUVisiNumber();// 空间访问数

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
allMemberList = new ArrayList<SimpleUser>();

getWindow().requestFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.friend_main_tab_allmember);
initViews();
user_getall();
AllMsgListManage.getInstance().activityVisi.add(this);
}

@Override
protected void onResume() {
super.onResume();

}

private void initViews() {
searchButton = (Button) findViewById(R.id.friend_main_tab_allmember_search_Button);
searchButton.setOnClickListener(this);

searchEditText = (EditText) findViewById(R.id.friend_main_tab_allmember_edit_EditText);

allMemberListAdater = new AllMemberListAdaterView(getAllMemberList(), this);

backButton = (Button) findViewById(R.id.friend_main_tab_allmember_back_Button);
backButton.setOnClickListener(this);

titleTextView=(TextView)findViewById(R.id.people_user_TextView);

friendListView = (ListView) findViewById(R.id.friend_main_tab_allmember_ListView);

mLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
footView = (LinearLayout) mLayoutInflater.inflate(R.layout.all_list_item_foot, null);
footTextLayout = (LinearLayout) footView.findViewById(R.id.btn_more_bg_default_LinearLayout);
footTextLayout.setOnClickListener(this);
footTextView = (TextView) footView.findViewById(R.id.btn_more_bg_default_TextView);
footTextView.setOnClickListener(this);
footProgressBar = (ProgressBar) footView.findViewById(R.id.btn_more_bg_default_ProgressBar);
friendListView.addFooterView(footView);
loadTextes(SNSParam.LIMIT);

friendListView.setAdapter(allMemberListAdater);
friendListView.setOnItemClickListener(this);
friendListView.setDivider(null);
friendListView.setOnScrollListener(new MyScrollListener());

sortButton = (Button) findViewById(R.id.friend_main_tab_allmember_sort_Button);
sortButton.setOnClickListener(this);

findFriendButton = (Button) findViewById(R.id.friend_main_tab_myfriend_find_Button);
findFriendButton.setOnClickListener(this);

}

public List<SimpleUser> getAllMemberList() {
return allMemberList;
}

public void setAllMemberList(List<SimpleUser> allMemberList) {
this.allMemberList.addAll(allMemberList);
}

@Override
public void onClick(View v) {
dismiKeyBorwd();
switch (v.getId()) {
case R.id.friend_main_tab_allmember_back_Button:
finish();
break;
case R.id.friend_main_tab_allmember_sort_Button:
Intent intent = new Intent(this, AllsortDialogActivity.class);
startActivityForResult(intent, 23);
break;
case R.id.btn_more_bg_default_LinearLayout:
user_getallBtn();
break;
case R.id.btn_more_bg_default_TextView:
user_getallBtn();
break;
case R.id.friend_main_tab_myfriend_find_Button:
Intent intentFind = new Intent(this, FindPeopleActivity.class);
startActivity(intentFind);
break;

case R.id.friend_main_tab_allmember_search_Button:
try {
String key = searchEditText.getText().toString();
user_search(key);
} catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}
}

//隐藏键盘
private void dismiKeyBorwd(){
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(AllMemberActivity.this
.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
//imm.hideSoftInputFromWindow(msgEditText.getWindowToken(), 0); 
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==FriendDialogGo.resultcode){
this.allMemberList.clear();
//user_getall();
return;
}

if (resultCode != RESULT_OK) {
return;
}
sortIn = data.getIntExtra(AllsortDialogActivity.ORDERSTRING,SNSParam.ORDER_DEFAULT);
System.out.println("sortIn--" + sortIn);
switch (sortIn) {
case SNSParam.ORDER_DEFAULT:
this.allMemberList.clear();
sortIn=SNSParam.ORDER_DEFAULT;

// Collections.sort(this.allMemberList, sortDefual);

// allMemberListAdater.update();
user_getall();
break;
case SNSParam.ORDER_BY_ACTIVITY:
this.allMemberList.clear();
sortIn=SNSParam.ORDER_BY_ACTIVITY;
user_getall();

// Collections.sort(this.allMemberList, sortOnLineCount);

// allMemberListAdater.update();
break;
case SNSParam.ORDER_BY_FRIEND:
this.allMemberList.clear();
sortIn=SNSParam.ORDER_BY_FRIEND;
user_getall();

// Collections.sort(this.allMemberList, sortFriendCount);

// allMemberListAdater.update();
break;
case SNSParam.ORDER_BY_VISIT:
this.allMemberList.clear();
sortIn=SNSParam.ORDER_BY_VISIT;
user_getall();

// Collections.sort(this.allMemberList, sortSpaceViCount);

// allMemberListAdater.update();
break;
}
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
SimpleUser app = getAllMemberList().get(arg2);
FriendDialogGo.actionFriendDialogGo(this, app);

}

private void ToastHint(String hint) {
Toast.makeText(this, hint, Toast.LENGTH_SHORT).show();
}

// 查询好友
private void user_search(final String key) {
try {
ProgressDialogHint.Show(this, "提示", "正在查找用户...");
SearchUser searchUser = new SearchUser();
searchUser.Request(this, key, SNSParam.ORDER_DEFAULT,
SNSParam.SEARCH_RULE_DEFAULT, 0, 20);
searchUser.SetOnResultListener(new onSearchUserListener() {
@Override
public int OnResultHandle(List<SimpleUser> list, int code,
String msg) {
ProgressDialogHint.Dismiss();
if (code != RespondType.SUCCESS || list == null) {
if (code==SNSParam.error_logo2||code==SNSParam.error_logo9) {
return 0;
}
if (msg != null && !msg.equalsIgnoreCase(""))

ToastHint(msg);
else
ToastHint("查找用户失败");

return 0;
} else {
if (list.size() < 1) {
ToastHint("抱歉!没有找到你要的好友。。");
} else {
// searchFriend( list);
FriendSearchActivity.actionFriendSearch(
AllMemberActivity.this, list,key);
}
}

// ToastHint("查找用户成功: 共(" + list.size() + ")个");
return 1;
}
});
} catch (Exception e) {
e.printStackTrace();
}
}

private void user_getall() {
try {
ProgressDialogHint.Show(this, "提示", "正在读取所有用户...");
GetAllUser getAllUser = new GetAllUser();
int count = getAllMemberList().size();
if (count <= 0) {
count = 0;
}
getAllUser.Request(this, sortIn, count, 5);
getAllUser.SetOnResultListener(new onGetAllUserListener() {
@Override
public int OnResultHandle(List<SimpleUser> list, int code,
String msg,int allnum) {
if (allnum>0) {
titleTextView.setText(new StringBuffer().append("全站会员(").append(allnum).append(")"));
}
ProgressDialogHint.Dismiss();
if (code != RespondType.SUCCESS || list == null) {
if (code==SNSParam.NODATA) {
loadTextes(SNSParam.NOLIMIT);
}
if (code==SNSParam.error_logo2||code==SNSParam.error_logo9) {
return 0;
}
if (msg != null && !msg.equalsIgnoreCase(""))
ToastHint(msg);
else
ToastHint("读取所有用户失败");
return 0;
} else {

try {
if (list.size() > 0) {
loadTextes(list.size());
setAllMemberList(list);
allMemberListAdater.update();
}

} catch (Exception e) {
e.printStackTrace();

}
}

// ToastHint("读取所有用户成功: 共(" + list.size() + ")个用户");
return 1;
}
});
getAllUser.SetOnTimeoutListener(new HttpTimeoutListener() {
@Override
public int OnTimeoutHandle() {
ProgressDialogHint.Dismiss();
ToastHint("加载超时,请重试");
return 0;
}
}, 40000);
} catch (Exception e) {
e.printStackTrace();
}
}

class MyScrollListener implements OnScrollListener {

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// System.out.println("f" + firstVisibleItem + "v" +
// visibleItemCount
// + "t" + totalItemCount);
// if(firstVisibleItem + visibleItemCount < totalItemCount - 3)
if (firstVisibleItem + visibleItemCount < totalItemCount + 2) {
// System.out.println("--f" + firstVisibleItem + "v"
// + visibleItemCount + "t" + totalItemCount);
return;
}
if (isLoading == false) {
user_getallBtn();
}
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}
}

private void loadText() {
isLoading = true;
footProgressBar.setVisibility(View.VISIBLE);
footTextView.setText("正在加载信息...");
footTextLayout.setVisibility(View.VISIBLE);
}

private void loadTextes(int count) {

isLoading = false;
footProgressBar.setVisibility(View.GONE);
footTextView.setText("获取更多");

if (count<SNSParam.LIMIT) {
footTextLayout.setVisibility(View.GONE);
}
}

private void user_getallBtn() {
try {
loadText();
GetAllUser getAllUser = new GetAllUser();
int count = getAllMemberList().size() ;
if (count <= 0) {
count = 0;
}
getAllUser.Request(this, sortIn, count, 5);
getAllUser.SetOnResultListener(new onGetAllUserListener() {
@Override
public int OnResultHandle(List<SimpleUser> list, int code,String msg,int allnum) {
if (allnum>0) {
titleTextView.setText(new StringBuffer().append("全站会员(").append(allnum).append(")"));
}

if (code != RespondType.SUCCESS || list == null) {
if (code==SNSParam.NODATA) {
loadTextes(SNSParam.NOLIMIT);
}
if (code==SNSParam.error_logo2||code==SNSParam.error_logo9) {
return 0;
}
if (msg != null && !msg.equalsIgnoreCase(""))
ToastHint(msg);
// else
// ToastHint("读取所有用户失败");
return 0;
} else {

try {
if (list.size() > 0) {
loadTextes(list.size());
//装载数据
setAllMemberList(list);
allMemberListAdater.update();
}else {
loadTextes(SNSParam.LIMIT);
}

} catch (Exception e) {
e.printStackTrace();
loadTextes(SNSParam.LIMIT);
}
}

// ToastHint("读取所有用户成功: 共(" + list.size() + ")个用户");
return 1;
}
});
getAllUser.SetOnTimeoutListener(new HttpTimeoutListener() {
@Override
public int OnTimeoutHandle() {
loadTextes(SNSParam.LIMIT);
return 0;
}
}, 40000);
} catch (Exception e) {
e.printStackTrace();
}
}

}

-------------------adater----------------------------------------------------------------------

package com.xxxxxx.sns.application.friend.adater;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.graphics.Bitmap;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnClickListener;

import android.widget.BaseAdapter;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.TextView;

public class AllMemberListAdaterView extends BaseAdapter {

private List<SimpleUser> allMemberList;// 全站的好友
private Activity mActivity;
private AsyncImageLoaderView asyncImageLoader = new AsyncImageLoaderView();// 实例化异步加载图片
private Map<Long, View>  cachMap=new HashMap<Long, View>();

public AllMemberListAdaterView(List<SimpleUser> allMemberList,
Activity mActivity) {
this.allMemberList = allMemberList;
this.mActivity = mActivity;
}

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

@Override
public Object getItem(int position) {

return position;
}

@Override
public long getItemId(int position) {

return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ListViewItemViewEntity holder;
final SimpleUser app = allMemberList.get(position);

// if (convertView == null) {
if (!cachMap.containsKey(app.getUserId())) {

convertView = this.mActivity.getLayoutInflater().inflate(
R.layout.friend_main_tab_myfriend_mf_item, null);
holder = new ListViewItemViewEntity();
holder.nameTextView = (TextView) convertView
.findViewById(R.id.friend_main_tab_mfname_item_TextView);
holder.iconImageView = (ImageView) convertView
.findViewById(R.id.friend_main_tab_mficon_item_ImageView);
holder.officeTextView = (TextView) convertView
.findViewById(R.id.friend_main_tab_mfoffice_item_TextView);
holder.onlineTextView=(TextView) convertView
.findViewById(R.id.friend_main_tab_online_item_TextView);

holder.companyTextView = (TextView) convertView
.findViewById(R.id.friend_main_tab_mfcompny_item_TextView);

holder.rightButton = (Button) convertView
.findViewById(R.id.friend_main_tab_mfright_item_Button);

convertView.setTag(holder);
//cachMap.put(app.getUserId(), convertView);

//
} else {
// convertView=cachMap.get(app.getUserId());
holder = (ListViewItemViewEntity) convertView.getTag();

// holder.iconImageView.setImageResource(R.drawable.default_people_icon);// 默认图片

// holder.onlineTextView.setText("");

}

                 //实图片异步加载
final ImageView ii = holder.iconImageView;
Bitmap bitmap = null;
if (AllMsgListManage.getInstance().userIcon.containsKey(app.getAvatarUrl())) {
bitmap = AllMsgListManage.getInstance().userIcon.get(app.getAvatarUrl());
} else {

if (bitmap == null) {// 如果缓存没有图片,自己去下载
asyncImageLoader.loadBitmap(app.getAvatarUrl(),
new ImageCallbackByAid() {

@Override
public void imageLoaded(Bitmap imageBitmap,
String imageUrl, int appAid) {
if (imageBitmap != null) {
try {
// 设置控件图片

// ii.setImageBitmap(imageBitmap);
AllMsgListManage.getInstance().userIcon.put(imageUrl, imageBitmap);

} catch (Exception e) {

e.printStackTrace();
}
}
}
}, ii, 1);

}

}
if (bitmap != null) {
ii.setImageBitmap(bitmap);
} else {
ii.setImageResource(R.drawable.default_people_icon);// 默认图片
}

holder.nameTextView.setText(app.getUserName());

holder.officeTextView.setText(app.getOffice());

holder.companyTextView.setText(app.getCompanyName());
// System.out.println("onlineCount:" + app.getOnLineCount() + " friendCount:"+ app.getFriendCount() + "  spaceCount:" + app.getSpaceCount());
holder.rightButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
FriendDialogGo.actionFriendDialogGo(mActivity, app);

}
});
if (app.getOnline()==SimpleUser.ISONLINE) {
holder.onlineTextView.setText("(在线)");
}else {
holder.onlineTextView.setText("");
}

return convertView;
}

      // 更新数据
public void update() {
System.out.println("-------" + allMemberList.size());
this.notifyDataSetChanged();
}

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