2015-06-15 2 views
0

Так, например, у меня есть ListView lv.Особый элемент раскраски - ListView

В каждом элементе в lv я получил TextView tv.

Теперь я хочу найти каждый tv в lv, и если найду tv с текстом, который хотел найти, то я хочу покрасить этот предмет.

Я пробовал: android - listview get item view by position, а затем окрасил предмет, но он разбился. Извините, я удалил код (пытался несколько методов).

Любая идея, как это сделать? Thx для справки;)

Редактировать: Я знаю, что могу использовать пользовательский адаптер и т. Д. Но я хочу избежать создания новых адаптеров из-за оптимизации.

Просмотр списка: 1, 2, 3

Пользователь нажимает кнопку, чтобы найти 2

TextView с 2 должен изменить фон на красный

Я хотел создать некоторый цикл, чтобы пройти через переменные, если обнаружено изменение цвета элемента и разрыв цикла.

+1

Мы должны увидеть код. И ваш код, а не пример. –

+0

У меня пока нет кода, я удалил эту часть. Но моя проблема проста. Как найти TextView в ListView? –

+0

см. Мой ответ ниже. –

ответ

0

Вам необходимо установить элементы с типом, а затем на основе этого цвета.

Переопределите два метода сварки в вашем адаптере.

@Override 
public int getItemViewType(int position) { 
// Define a way to determine which layout to use, here it's just evens and odds. 
return position % 2; 
} 

    @Override 
public int getViewTypeCount() { 
return 2; // Count of different layouts 
} 

затем в методе GetView использовать getItemViewType() и установите цвет

+0

Thx для попытки, но я хочу сделать это без использования адаптера. Пользователь хочет найти текст в TextView, который является элементом в ListView. Этот элемент должен быть красным, если найден. Я хочу сделать это без использования адаптера. Я знаю, что я мог бы создать собственный адаптер для этого, переписать данные и изменить цвет, но я хочу сделать некоторую оптимизацию. –

+0

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

+0

Да, но посмотрите, мне нужно снова воссоздать весь список, чтобы изменить цвет 1 предмета. У меня может быть много предметов, поэтому да, думаю, это оптимизация.Я думаю, что лучше просто найти текст, используя какой-то цикл, изменить цвет 1 элемента и разбить цикл –

1

Вы можете создать пользовательский переходник их проверить, если TextViw есть текст, который вы хотите.

public class ProgramasListAdapter extends ArrayAdapter<YourModel> { 

    public CustomAdapter(Context context,List<YourModel> objects) { 
     super(context, 0, objects); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     YourModel object = getItem(position); 

     ViewHolder holder; 
     if (convertView == null) { 
      convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_list, null); 
      holder = new ViewHolder(); 
      holder.textView = (TextView) convertView.findViewById(R.id.textview); 
      holder.layout = (LinearLayout) convertView.findViewById(R.id.layout); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     holder.textView.setText(object.getText()); 
     if (object.getText().equals("your_text")) 
      holder.layout.setBackground(...); 

     return convertView; 
    } 

    static class ViewHolder { 
     TextView textView; 
     LinearLayout layout; 
    } 
} 

Затем установите адаптер к ListView:

mAdapter = new CustomAdapter(context, myModelArray); 
listView.setAdapter(mAdapter); 
+0

спасибо, +1 за код, который я тоже хотел создать. Я думаю об оптимизации. Я хочу избежать создания новых адаптеров и т. Д. Просто используя некоторые циклы, проверьте значение и цвет на один элемент, если это возможно. Не знаю, как это сделать, и мне кажется, что мне нужно будет создать пользовательский адаптер. –

+0

Извините, я не знаю, как это сделать, не создавая пользовательский адаптер, на самом деле я думаю, что оптимизирован с помощью пользовательского адаптера, потому что вы устанавливаете цвет при создании ячейки LisView. –

+0

Правда, но просмотр списка может быть создан ранее, и пользователь может запросить уже созданный элемент. Затем его можно оптимизировать без создания нового адаптера. Я думаю, что я сделаю новый адаптер, может быть, когда-нибудь я найду для него некоторую оптимизацию. Thx много помощи –

0

Вы должны использовать адаптер для корма в виде списка. Это может быть массив или MatrixCursor, созданный при вызове sqlite. Как только вы что, и предполагается, что ваш товар список файлов XML имеет LinearLayout с TextView в нем:

View parentThis = (LinearLayout)inflater.inflate(R.layout.your_layout, container, false); 
    ListView listView = (ListView)parentThis.findViewById(R.id.your_list_view); 
    listView.setAdapter(getListViewAdapter()); //set up your array or matrix cursor 
    listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      LinearLayout layout = (LinearLayout) view; 
      TextView textView = (TextView) layout.findViewById(R.id.YourTextView); 

     } 
    }); 
+0

THX для ответа. Я ищу раскраску определенного элемента. К сожалению, при щелчке по объекту это бесполезно. Например, я получил такое ListView: Я хочу найти 2, а затем окрасить его в красный цвет. –

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