群里面有朋友问起微信的聊天置顶功能,一朋友建议使用LinkedList,貌似很简单的说。特动手实践一番。
在listview中实现点击后置顶的效果,上代码
public View getView(int position, View convertView, ViewGroup parent) {
View view = inflater.inflate(R.layout.imgtxt,null);
final ImgTxtBean b = getItem(position);
final String textStr=b.getText();
ImageView image = (ImageView)view.findViewById(R.id.img);
TextView text = (TextView)view.findViewById(R.id.txt);
text.setText(b.getText());
if(b.getResid()>0){
image.setBackgroundResource(b.getResid());
}
// 曾打算在这里实现每次应用打开的时候初始化实现记录的置顶项
// String temp=getValue(PC_KEY);
// boolean flag=false;
// if (null!=temp&&!"".equals(temp)) {
// if (!flag) {
// list.addFirst(b);
// flag=true;
// notifyDataSetChanged();
// }
// }
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0){
//把要置顶的该项先从列表中移除
list.remove(b);
//把该项置顶
list.addFirst(b);
//置顶后,保存该项。便于下次应用重启时读取
beanKey=b.getText();
saveValueByKey(PC_KEY,beanKey);
//刷新列表
notifyDataSetChanged();
}
});
return view;
}
这样就实现了点击置顶的效果。
但是我们会发现,当我们每次重新登陆微信的时候,之前的置顶项还在。而我们做的这个,退出应用重新打开的时候,又恢复了原样。好吧,既然如此那就继续。
首先,我们得把我们每次点击后置顶的选项保存起来,然后在每次登陆的时候去找我们的保存的记录。找到记录后,把该项置顶。这样就实现了我们要求的功能。
我们保存记录使用SharedPreferences保存在本地。当然如果我们需要实现在任何一部设备上保留上次的置顶操作时,我们就需要使用到服务器的远程保存了。
上代码
/**
* 写入配置文件
* @param key 以什么名字保存
* @param value 保存的值
*/
publicvoid saveValueByKey(Stringkey, String value){
// 载入配置文件
SharedPreferences sp = context.getSharedPreferences(
PC_NAME, Context.MODE_PRIVATE);
// 写入配置文件
Editor spEd = sp.edit();
spEd.putString(key, value);
spEd.commit();
}
保存已经OK,接着我们在应用打开的时候,再读取该配置实现置顶效果
读取配置
/**
* 获取值,调用方式必须是 getValue("userSalted")
*
* @return
*/
public String getValue(String key) {
String flag = "";
SharedPreferences sp = context.getSharedPreferences(
PC_NAME, 0);
flag = sp.getString(key, "");
return flag;
}
读取配置,进行比对,并置顶
String temp=getValue(PC_KEY);
for (int i = 0; i < list.size(); i++) {
ImgTxtBean b =list.get(i);
if (null!=temp&&!"".equals(temp)) {
if (temp.equalsIgnoreCase(b.getText())) {
list.remove(b);
list.addFirst(b);
}
// list.addFirst(b);
}
}
当我们进行置顶操作的时候,要把链表中的置顶项要移除了,要不然会出现重复值。语文没学好,见谅。
代码地址http://download.csdn.net/detail/pengcheng_liu/7570621