查看: 1902|回复: 0

[Android教程] Android中listview和imageview实现条目单选效果

发表于 2017-8-6 11:35:52
尚学堂AD

前段时间在项目开发中,有listview实现单选和多选的效果,特别是listview的单选效果,一开始项目比较紧,自己考虑的是用listview和radionbutton实现的,可能是自己考虑不周到的原因,效果是实现了,但是用户体验不怎么好,做完项目后,自己又弄了下,使用listview和imageview实现,点击listview条目的时候就可以实现单选效果,这样用户体验就稍微好些。以下就是实现的方式:

activity_main.xml文件:

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.listtest.MainActivity$PlaceholderFragment" >
  6. <ListView
  7. android:id="@+id/listview"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent" />
  10. </RelativeLayout>
复制代码

listview_item.xml文件

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. tools:context="com.listtest.MainActivity$PlaceholderFragment" >
  6. <RelativeLayout
  7. android:layout_width="fill_parent"
  8. android:layout_height="50dp">
  9. <TextView
  10. android:id="@+id/tv"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:textSize="15sp"
  14. android:textColor="#000000"
  15. android:text="123112"
  16. android:layout_centerVertical="true"
  17. android:layout_marginLeft="15dp"/>
  18. <ImageView
  19. android:id="@+id/iv"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:src="@drawable/sex_nor"
  23. android:layout_alignParentRight="true"
  24. android:layout_centerVertical="true"
  25. android:layout_marginRight="15dp"/>
  26. </RelativeLayout>
  27. </RelativeLayout>
复制代码

MainActivity文件:

  1. public class MainActivity extends ActionBarActivity implements OnItemClickListener {
  2. private ListAdapter adapter;
  3. private ListView listview;
  4. private List<String> list=new ArrayList<String>();
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. requestWindowFeature(Window.FEATURE_NO_TITLE);
  9. setContentView(R.layout.activity_main);
  10. initView();
  11. }
  12. private void initView() {
  13. listview = (ListView) findViewById(R.id.listview);
  14. addData();
  15. adapter=new ListAdapter(MainActivity.this);
  16. listview.setAdapter(adapter);
  17. listview.setOnItemClickListener(this);
  18. }
  19. private void addData() {
  20. for (int i = 0; i < 20; i++) {
  21. list.add("深圳"+i);
  22. }
  23. }
  24. class ListAdapter extends BaseAdapter{
  25. private int selectedPosition = -1;// 选中的位置
  26. private Context context;
  27. public ListAdapter(Context context) {
  28. this.context = context;
  29. }
  30. @Override
  31. public int getCount() {
  32. return list.size();
  33. }
  34. @Override
  35. public Object getItem(int position) {
  36. return list.get(position);
  37. }
  38. public void setSelectedPosition(int position) {
  39. selectedPosition = position;
  40. }
  41. @Override
  42. public long getItemId(int position) {
  43. return position;
  44. }
  45. @Override
  46. public View getView(int position, View convertView, ViewGroup parent) {
  47. ViewHolder holder;
  48. if (convertView==null) {
  49. holder=new ViewHolder();
  50. convertView=LayoutInflater.from(context).inflate(R.layout.listview_item, null);
  51. holder.tv=(TextView) convertView.findViewById(R.id.tv);
  52. holder.iv=(ImageView) convertView.findViewById(R.id.iv);
  53. convertView.setTag(holder);
  54. }else{
  55. holder=(ViewHolder) convertView.getTag();
  56. }
  57. String string = list.get(position);
  58. holder.tv.setText(string);
  59. if(position%2==0){
  60. if (selectedPosition==position) {
  61. convertView.setSelected(true);
  62. convertView.setPressed(true);
  63. // convertView.setBackgroundColor(Color.parseColor("#0097e0"));
  64. holder.iv.setImageResource(R.drawable.sex_down);
  65. }else{
  66. convertView.setSelected(false);
  67. convertView.setPressed(false);
  68. // convertView.setBackgroundColor(Color.parseColor("#e4ebf1"));
  69. holder.iv.setImageResource(R.drawable.sex_nor);
  70. }
  71. }else{
  72. if (selectedPosition==position) {
  73. convertView.setSelected(true);
  74. convertView.setPressed(true);
  75. holder.iv.setImageResource(R.drawable.sex_down);
  76. // convertView.setBackgroundColor(Color.parseColor("#0097e0"));
  77. }else{
  78. convertView.setSelected(false);
  79. convertView.setPressed(false);
  80. // convertView.setBackgroundColor(Color.parseColor("#ced7de"));
  81. holder.iv.setImageResource(R.drawable.sex_nor);
  82. }
  83. }
  84. return convertView;
  85. }
  86. class ViewHolder{
  87. TextView tv;
  88. ImageView iv;
  89. }
  90. }
  91. @Override
  92. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  93. adapter.setSelectedPosition(position);
  94. adapter.notifyDataSetInvalidated();
  95. }
  96. }
复制代码

以上就是全部代码了。效果如下

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报