参考 http://blog.csdn.net/sky181772733/article/details/7003125
在前一篇讲到ListView中TextView跑马灯效果的问题。一种比较友好的方式是,ListView中只有被选中项才会触发跑马灯效果。
实现的思路是:监听到ListView的onItemClick事件时记录当前item的postion,并通知adapter数据发生改变(另一个item被选中,selected状态改变),需要getView更新View(之前selected的item停止跑马灯效果,当前selected的item开始跑马灯效果)。 下面看看是具体怎么实现的,
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final MyArrayAdapter adapter = new MyArrayAdapter(this,
R.layout.list_item, R.id.textView1);
adapter.add("超长的文本超长的文本超长的文本");
adapter.add("超长的文本超长的文本超长的文本");
adapter.add("超长的文本超长的文本超长的文本");
adapter.add("超长的文本超长的文本超长的文本");
adapter.add("超长的文本超长的文本超长的文本");
adapter.add("超长的文本超长的文本超长的文本");
getListView().setAdapter(adapter);
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// 设置选中项
adapter.setSelectedIndex(position);
// 通知adapter数据发生变化(TextView的selected状态发生变化)
adapter.notifyDataSetChanged();
}
});
}
class MyArrayAdapter extends ArrayAdapter<String> {
public MyArrayAdapter(Context context, int resource,
int textViewResourceId) {
super(context, resource, textViewResourceId);
}
private int mSelectedIndex;
public void setSelectedIndex(int index) {
this.mSelectedIndex = index;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
TextView tv = (TextView) v.findViewById(R.id.textView1);
if (mSelectedIndex == position) {
tv.setSelected(true);
} else {
tv.setSelected(false);
}
return v;
}
}
}
运行效果如下,代码见附件