仿微信聊天置顶

来源:互联网 发布:win7优化大全 编辑:程序博客网 时间:2024/05/03 01:31

里面有朋友问起微信的聊天置顶功能,一朋友建议使用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


0 0