【问题标题】:Custom listview and adaptor overriding getView, changing text colour自定义列表视图和适配器覆盖 getView,更改文本颜色
【发布时间】:2014-10-03 12:13:07
【问题描述】:

对于这样的问题有很多关于堆栈溢出的答案,但我找不到可以转化为我的情况的答案。

实际上我有一个覆盖 getView 方法的列表视图,列表视图本身正在显示一个字符串,我想要实现的是能够在以后更新此文本的颜色,而不是第一次已创建。

我目前拥有的是物品所在的位置,从这里我基本上卡住了,我不确定下一步。

 ListView lv = (ListView) rootView.findViewById(R.id.lvBarcodes);
            Adapter adaptor = lv.getAdapter();
            int Position = getPosition(CurrentBarcode);
            lBarcodes l = (lBarcodes) lv.getItemAtPosition(Position);

l基本上包含2个方法,set和get所以我相信这一步是不需要的,我基本上想要一个setTextColour(position)方法!

我在下面附上了我的代码:

设置列表视图:

ListView lv = (ListView) rootView.findViewById(R.id.lvBarcodes);
            LA_Barcodes adaptor = new LA_Barcodes(getActivity(),barcodeList);
            lv.setAdapter(adaptor);

方法:

public class LA_Barcodes extends BaseAdapter{

     ViewHolder holder = null;

    private static LayoutInflater inflater = null;
    private final ArrayList Lines;

    public LA_Barcodes(Context _ctx, ArrayList _lines)
    {
        this.Lines = _lines;
        Context ctx = _ctx;
        inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        if (Lines.size() <= 0)
            return 1;
        return Lines.size();
    }

    @Override
    public Object getItem(int position) {
        return Lines.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View vi = convertView;


        if(convertView == null)
        {
            vi = inflater.inflate(R.layout.lv_barcodes,null);
            holder = new ViewHolder();
            holder.Barcodes = (TextView) vi.findViewById(R.id.barcodes);
            vi.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) vi.getTag();
        }


        if(Lines.size() == 0)
        {
            holder.Barcodes.setText("No Outstanding Deliveries!");
        }
        else
        {
            lBarcodes temp;
            temp = (lBarcodes) Lines.get(position);
            holder.Barcodes.setText(temp.getBarcode());
        }

        return vi;

    }



    public static class ViewHolder
    {
        public TextView Barcodes;
    }
}

【问题讨论】:

    标签: android android-listview listadapter


    【解决方案1】:

    您可以在适配器中定义另一个空的arrayList,以保持应该改变颜色的editText的位置。

    ArrayList<Integer> pos = new ArrayList<Integer>();
    

    以及在数组中添加位置的方法:

    public void addPos(int position){
       pos.add(position);
       notifyDataSetChanged();
    }  
    

    然后在您的适配器中(在getView() 方法中)检查此数组中是否存在位置更改textColor:

    if(pos.contain((Object) position)){
         //change text color
    }  
    

    您可以拨打adapter.addPos(CurrentBarcode);更改文字颜色

    【讨论】:

    • 谢谢!我认为您的意思是 adapter.addPos(Position);
    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    相关资源
    最近更新 更多