Xamarin Подсвечивать строки в ListView - PullRequest
0 голосов
/ 10 сентября 2018

Я новичок в Xamarin / Android. У меня есть список с примерно 20 строками (для просмотра последних нескольких строк пользователям необходимо прокрутить вниз). У меня есть требование автоматически выделять случайные строки на основе некоторых рассчитанных значений. Мой вопрос: после заполнения списка (у меня есть специальный адаптер для заполнения списка), как я могу установить цвет фона или переднего плана для выбранной строки (скажем, 3-й ряд, выделите его на 10 секунд, затем выделите 1-й ряд - номер строки основан на расчете).

Могу ли я также выполнить автоматическую прокрутку вверх / вниз, чтобы отобразить строку, которая в данный момент находится за пределами экрана? Например, если в данный момент я выделяю строку 2, а затем мне нужно выделить строку 15, я хочу, чтобы приложение автоматически прокручивало страницу вниз и отображало выделенную строку 15. Возможно ли это?

Ниже приведен мой пользовательский адаптер.

public class PeopleListAdapter: BaseAdapter<Content>
    {
        List<Content> content;
        Activity context;
        public PeopleListAdapter(Activity context, List<Content> content) : base()
        {
            this.context = context;
            this.content = content;
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override Content this[int position]
        {
            get { return content[position]; }
        }
        public override int Count
        {
            get { return content.Count; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            View view = convertView; // re-use an existing view, if one is available
            if (view == null) // otherwise create a new one
                view = context.LayoutInflater.Inflate(Resource.Layout.listlayout, null);
            view.FindViewById<TextView>(Resource.Id.txtValues).Text = content[position].Text;
            return view;
        }
    }

Ниже приведен мой макет списка.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">

  <ListView
       android:minWidth="25px"
       android:minHeight="25px"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/list" >    
  </ListView>
</LinearLayout>

У меня есть адаптер, заполняющий макет ниже (listlayout.axml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:text="Text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/txtValues" />
</LinearLayout>

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

1 Ответ

0 голосов
/ 10 сентября 2018

В вашем методе getview у вас есть представление, которое вы надуваете для каждой строки:

 View view = convertView; // re-use an existing view, if one is available

 if (view == null) // otherwise create a new one
 view = context.LayoutInflater.Inflate(Resource.Layout.listlayout, null);

Здесь назначьте свойство тега для представления. то есть view.setTag (position).

Затем в том же методе getview добавьте проверку if (Integer.parserInt (view.getTag ()) == positionToHighlight), затем установите цвет фона представления. Например: view.setBackground ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...