ArrayAdapter getView的颜色多于一个

时间:2014-04-03 06:16:41

标签: android listview android-listview android-arrayadapter

我有一个ListView,每个运行时都有不同的条目数(正常 - >取决于用户)

我阅读了一篇帖子来更改适配器getView()中TextView的颜色。 它运作良好,如果我不滚动 - >然后有更多彩色条目......! 我只想要 ONE

我试图只更改一个特定行,而不是其他行。其他人有正确的颜色'。

listview_otherSubnets.setAdapter(new ArrayAdapter<String>(this, R.layout.networks_list_item, list) {
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View view=super.getView(position, convertView, parent);

                TextView textView=(TextView) view.findViewById(R.id.networkslistitem);

                //index_network specifies the specific network row

                /*YOUR CHOICE OF COLOR*/
                if(index_network==-1) {//get the error entry
                //always one entry and if calculation above is not correct then there would be an error text in the TextView
                    textView.setTextColor(Color.parseColor("#ff4444"));
                    textView.setTypeface(null, Typeface.BOLD);
                }

                if(index_network!=-1 && index_network==position){//get the specific one
                    Log.i("OtherSubnet", "Adapter Current Network");
                    textView.setTextColor(Color.parseColor("#33b5e5"));
                    textView.setTypeface(null, Typeface.BOLD);
                }

                //otherwise default color (from the xml) -> see image

                view.setClickable(false);

                return view;
            }
    });
滚动后

无错误消息
after scrolling
正确的是:只有一行

是否可以获取TextView的文字,如果它在第一次运行时?是应该设置的文字?

我试过,我有例外。

2 个答案:

答案 0 :(得分:1)

适配器类的设计方式是,滚动视图将被重用,但不会再次创建。滚动后的彩色文本视图将被重复使用,因此其他一些元素将被着色。如果你再次流口水,会有更多的彩色元素。这就是为什么你必须用所需的颜色为标记的元素着色,并用正常的颜色为所有其他元素着色。

listview_otherSubnets.setAdapter(new ArrayAdapter<String>(this, R.layout.networks_list_item, list) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view=super.getView(position, convertView, parent);

            TextView textView=(TextView) view.findViewById(R.id.networkslistitem);

            if(index_network==position){
                Log.i("OtherSubnet", "Adapter Current Network");
                textView.setTextColor(Color.parseColor("#33b5e5"));
                textView.setTypeface(null, Typeface.BOLD);
            } else {
                textView.setTextColor(Color.parseColor("#ff4444"));
                textView.setTypeface(null, Typeface.BOLD);
            }

            view.setClickable(false);
            return view;
        }
});

答案 1 :(得分:0)

您必须再添加一个条件,将颜色设置为其他条件。

if(index_network!=-1 && index_network!=position){//get the specific one
    Log.i("OtherSubnet", "Adapter Current Network");
    textView.setTextColor(Color.parseColor("#Something else"));
    textView.setTypeface(null, Typeface.BOLD);
}