2014-10-03 6 views
0

Есть много ответов на переполнение стека на такие вопросы, но я не могу найти тот, который я могу перевести в свою ситуацию.Пользовательский список и адаптер, переопределяющий getView, меняющий цвет текста

Фактически у меня есть listview, который переопределяет метод getView, сам список показывает строку, что я пытаюсь достичь, так это возможность обновить цвет этого текста, основанного на более позднем времени, а не когда сначала создан.

В настоящее время у меня есть позиция, в которой находится элемент, отсюда я в основном застреваю, я не уверен в следующем шаге.

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

л в основном содержит 2 метода, набор и получить таким образом, я считаю, что это шаг uneeded, что я бы в принципе нравится это метод setTextColour (позиция)!

Я приложил мой код ниже:

Настройка ListView:

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; 
    } 
} 

ответ

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); изменить текстЦвет

+0

Спасибо! Я думаю, вы имели в виду adapter.addPos (Position); – dave

Смежные вопросы