网上找了很多ListView选中后变色的文章,但都是什么字体设置变色选择器,要不就是ListView设置变色器,单行选中变色的始终找不到!
甚至还有人说用ListView的onItemSelectedListener方法,可是我用了这个方法,居然一点反应都没有好不好!
最后才看到有人说这个方法是针对有实体键盘的,用实体键盘的上下键才会触发这个事件~!
现在还有几个手机用实体键盘啊(老年机和个人爱好收藏者除外);
这个功能我纠结了一两天才搞定,一定要记录下来,大家共勉!这个才是真的单选,非多选,非点击变色后又恢复
这个就是效果图了,主要原理就是在adapter里面比较资源,然后在外面刷新Adapter,代码如下
1.主MainActivity.java
package cq.cake.listselect;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {
private List<String> mDatas;
private ListView listView;
private ListViewSelectAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
initEvent();
}
private void initView() {
listView = (ListView) findViewById(R.id.listView_select);
}
private void initData() {
mDatas = new ArrayList<>();
for (int i = 'A'; i <'z' ; i++) {
mDatas.add((char)i+"");
}
adapter = new ListViewSelectAdapter(this, mDatas);
listView.setAdapter(adapter);
}
private void initEvent() {
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
notifyTextColor(position);
}
});
}
/**
* 选中变色,一定要刷新adapter
*
* @param position
*/
public void notifyTextColor(int position) {
adapter.setSelectPosition(position);
adapter.notifyDataSetChanged();
}
}
2。还有就是Adapter了
package cq.cake.listselect;
import android.content.Context;
import android.graphics.Color;
import android.widget.TextView;
import java.util.List;
/**
* My Application -- cq.cake.listselect
* Created by Small Cake on 2016/1/20 10:12.
*/
public class ListViewSelectAdapter extends Xadapter<String> {
private int mPosition;
public ListViewSelectAdapter(Context context, List<String> listDatas) {
super(context, listDatas, R.layout.item_text1);
}
@Override
public void convert(ViewHolder holder, String s) {
holder.setText(R.id.text,s);
TextView view = holder.getView(R.id.text);
//这里的listDatas就是同过构造函数传递进来的集合,通过比较值来改变颜色
if(listDatas.get(mPosition).equals(s)){
view.setTextColor(Color.parseColor("#ff00ff"));
}else{
//没有选中的行都变灰色
view.setTextColor(Color.parseColor("#8a8a8a"));
}
}
public void setSelectPosition(int position){
this.mPosition = position;
}
}
好了,就只需这里设置一下就Ok~!
源代码一并奉上,方便大家学习:ListView单选文字变色