Android 在自定义ListView的其他行上实现的onItemClickListener

Android 在自定义ListView的其他行上实现的onItemClickListener,android,database,listview,view,android-arrayadapter,Android,Database,Listview,View,Android Arrayadapter,--编辑-- 我所拥有的: vi = inflater.inflate(R.layout.itemshow, null); vi.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { Log.i("myList","isClicked"); if(PreviousView!=null){

--编辑--

我所拥有的:

vi = inflater.inflate(R.layout.itemshow, null);

vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Log.i("myList","isClicked");
            if(PreviousView!=null){
                PreviousView.setBackgroundColor(Color.WHITE);
                holder.nametext.setTextColor(Color.BLACK);
                holder.quantitytext.setTextColor(Color.BLACK);
                holder.pricetext.setTextColor(Color.BLACK);
            }

            v.setBackgroundColor(Color.parseColor("#330000"));
            holder.nametext.setTextColor(Color.WHITE);
            holder.quantitytext.setTextColor(Color.WHITE);
            holder.pricetext.setTextColor(Color.WHITE);
            PreviousView = v;
        }
    });
2个不同颜色的列表视图

我正在使用CustomListViewAdapter

我想做什么:

vi = inflater.inflate(R.layout.itemshow, null);

vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Log.i("myList","isClicked");
            if(PreviousView!=null){
                PreviousView.setBackgroundColor(Color.WHITE);
                holder.nametext.setTextColor(Color.BLACK);
                holder.quantitytext.setTextColor(Color.BLACK);
                holder.pricetext.setTextColor(Color.BLACK);
            }

            v.setBackgroundColor(Color.parseColor("#330000"));
            holder.nametext.setTextColor(Color.WHITE);
            holder.quantitytext.setTextColor(Color.WHITE);
            holder.pricetext.setTextColor(Color.WHITE);
            PreviousView = v;
        }
    });
1-在单击第一个ListView的项目时,此视图的颜色将设置为与第二个ListView相同的颜色,TextView的文本颜色将为白色而不是黑色

2-单击其他项目时,第一个项目将返回原样

问题:

vi = inflater.inflate(R.layout.itemshow, null);

vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Log.i("myList","isClicked");
            if(PreviousView!=null){
                PreviousView.setBackgroundColor(Color.WHITE);
                holder.nametext.setTextColor(Color.BLACK);
                holder.quantitytext.setTextColor(Color.BLACK);
                holder.pricetext.setTextColor(Color.BLACK);
            }

            v.setBackgroundColor(Color.parseColor("#330000"));
            holder.nametext.setTextColor(Color.WHITE);
            holder.quantitytext.setTextColor(Color.WHITE);
            holder.pricetext.setTextColor(Color.WHITE);
            PreviousView = v;
        }
    });
一切都很顺利,直到我注意到当我点击一个项目并滚动时,其他视图也在改变背景颜色和文本颜色

在CustomListAdapater的getView()中:

vi = inflater.inflate(R.layout.itemshow, null);

vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Log.i("myList","isClicked");
            if(PreviousView!=null){
                PreviousView.setBackgroundColor(Color.WHITE);
                holder.nametext.setTextColor(Color.BLACK);
                holder.quantitytext.setTextColor(Color.BLACK);
                holder.pricetext.setTextColor(Color.BLACK);
            }

            v.setBackgroundColor(Color.parseColor("#330000"));
            holder.nametext.setTextColor(Color.WHITE);
            holder.quantitytext.setTextColor(Color.WHITE);
            holder.pricetext.setTextColor(Color.WHITE);
            PreviousView = v;
        }
    });
代码:

vi = inflater.inflate(R.layout.itemshow, null);

vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Log.i("myList","isClicked");
            if(PreviousView!=null){
                PreviousView.setBackgroundColor(Color.WHITE);
                holder.nametext.setTextColor(Color.BLACK);
                holder.quantitytext.setTextColor(Color.BLACK);
                holder.pricetext.setTextColor(Color.BLACK);
            }

            v.setBackgroundColor(Color.parseColor("#330000"));
            holder.nametext.setTextColor(Color.WHITE);
            holder.quantitytext.setTextColor(Color.WHITE);
            holder.pricetext.setTextColor(Color.WHITE);
            PreviousView = v;
        }
    });

提前感谢您的帮助…

您需要在
列表视图的
getView
方法中为视图设置默认颜色。发生这种情况的原因是视图在
listview
中循环使用。如果您想更好地控制视图,最好创建自己的适配器并重写
getView()
方法:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
vi = inflater.inflate(R.layout.itemshow, null);

vi.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Log.i("myList","isClicked");
            if(PreviousView!=null){
                PreviousView.setBackgroundColor(Color.WHITE);
                holder.nametext.setTextColor(Color.BLACK);
                holder.quantitytext.setTextColor(Color.BLACK);
                holder.pricetext.setTextColor(Color.BLACK);
            }

            vi.setBackgroundColor(Color.parseColor("#330000"));
            holder.nametext.setTextColor(Color.WHITE);
            holder.quantitytext.setTextColor(Color.WHITE);
            holder.pricetext.setTextColor(Color.WHITE);
            PreviousView = vi;
        }
    });

    vi.setBackgroundColor(Color.parseColor("#000000")); // setup default color here
// for your TextView's as well, if you change them on click
    }

我终于解决了我的问题。。如果有人感兴趣,我会发布我的代码:)我现在不会发布,因为没有太多的视图

此外,我建议阅读本文有困难的人:


我没有使用CustomListViewAdapter,这就是问题所在。。我使用的是SimpleCursorAdapter我在使用自定义适配器时遇到了很多麻烦,这就是为什么我改为使用此方法的原因。好的,所以我又改回了自定义适配器。。但我也发现自己面临同样的问题。我重新发布了我的新代码,如果您能提供帮助的话,它将非常吸引人。您需要在
getView()
方法中显式设置背景,即v.setBackgroundColor(Color.parseColor(#000000”);好的,我为视图设置了背景色,为TextView设置了文本颜色。现在,当单击并上下滚动时,视图将返回到其原始颜色和文本颜色:/