解决: 用代码改变listview的item背景色时,点击一个item,每隔几个item背景色重复

来源:互联网 发布:通达信编程 编辑:程序博客网 时间:2024/04/28 00:42

例如,用listview写列表的时候,点击第一个item的时候,第七个item的背景色也改变


要解决这个问题,只需要将前一个view作为tag,设定到viewGroup中即可,代码如下:

package com.example.twolistviewfragmentsdemo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.R.color;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;public class MainActivity extends Activity {    public static String FIRSTLIST_TITLE = "f_title";    public static String FIRSILIST_IMG = "f_img";    private String[] listviewtitle = new String[]{"法海你不懂爱", "王大锤", "父王", "怪兽甲+乙+丙", "纯娘子墨", "孔连顺车纳姆", "......", "尸哥", "锤锤" };    private int[] listviewimg = new int[]{R.drawable.icons_1, R.drawable.icons_2, R.drawable.icons_3, R.drawable.icons_4, R.drawable.icons_5,        R.drawable.icons_6, R.drawable.icons_7, R.drawable.icons_8, R.drawable.icons_9 };    private String[] detailsStrings = new String[]{"现已加入肯基佬豪华午餐~!", "走上人生巅峰~!", "这是大自然的规律,没办法避免的呀~", "那个....那个...就从我的...额...我的....额....尸体上跨过去吧!",        "老娘不在乎~~!", "下次有女性角色,还让你演!", "——。——", "...........", "您的拉链已经拉好了!" };    private int[] detailsimgs = new int[]{R.drawable.details_img2, R.drawable.details_img3, R.drawable.details_img4, R.drawable.details_img5,        R.drawable.details_img6, R.drawable.details_img7, R.drawable.details_img8, R.drawable.details_img9, R.drawable.details_img10 };    private ListView listView;    private int currentPosition;    private LinearLayout detailsLayout;    private TextView detailsTextView;    private ImageView detailsImageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        currentPosition = -1;        findViews();        initList();    }    private void findViews() {        listView = (ListView) findViewById(R.id.first_listview);        detailsLayout = (LinearLayout) findViewById(R.id.details_layout);        detailsTextView = (TextView) detailsLayout.findViewById(R.id.text_details);        detailsImageView = (ImageView) detailsLayout.findViewById(R.id.image_details);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    private void initList() {        setFirstListBackgroundAdapter firstlistAdapter = new setFirstListBackgroundAdapter(this, getFirstListItemData(), R.layout.firstlist_item,                new String[]{"f_title", "f_img" }, new int[]{R.id.first_listview_item_title, R.id.first_listview_item_img });        listView.setAdapter(firstlistAdapter);    }    private List<Map<String, Object>> getFirstListItemData() {        List<Map<String, Object>> firstList = new ArrayList<Map<String, Object>>();        for (int i = 0; i < listviewtitle.length; i++) {            Map<String, Object> map1 = new HashMap<String, Object>();            map1.put(FIRSTLIST_TITLE, listviewtitle[i]);            map1.put(FIRSILIST_IMG, listviewimg[i]);            firstList.add(map1);        }        return firstList;    }    class setFirstListBackgroundAdapter extends SimpleAdapter {        public setFirstListBackgroundAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {            super(context, data, resource, from, to);            // TODO Auto-generated constructor stub        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            convertView = super.getView(position, convertView, parent);            convertView.setBackgroundColor(getResources().getColor(color.white));            if (position == currentPosition) {                convertView.setBackgroundColor(getResources().getColor(color.holo_blue_light));            }            final int realPosition = position;            final ViewGroup vGroup = parent;            convertView.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View v) {                    // 记录当前位置                    currentPosition = realPosition;                    v.setBackgroundColor(getResources().getColor(color.holo_blue_light));                    // 改变上一个item的背景色为白色,将本次改变背景色的view放入parent中,方便下次取用将背景色改变回白色                    View view = (View) vGroup.getTag();                    if (view != null) {                        view.setBackgroundColor(getResources().getColor(color.white));                    }                    v.setBackgroundColor(getResources().getColor(color.holo_blue_light));                    vGroup.setTag(v);                    // 显示相应的右边details的内容                    detailsTextView.setText(detailsStrings[realPosition]);                    detailsImageView.setImageDrawable(getResources().getDrawable(detailsimgs[realPosition]));                }            });            return convertView;        }    }}

重点是getView方法,解决后就没问题了~




0 0