«Xamarin Android» Как установить свойство TextCell для ListView? - PullRequest
0 голосов
/ 20 сентября 2019

В Xamarin Forms мы можем установить свойство TextCell следующим образом?

        <ListView x:Name="WorkersListView" BackgroundColor="#ECEFF1" Margin="2" ItemSelected="WorkersListView_ItemSelected">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell TextColor="Black" Text="{Binding WorkerName}"/>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

Написав ListView.ItemTemplate и DataTemplate, мы можем получить доступ к TextCell

Но как я могу это сделать?это на Xamarin Android ?

, потому что у него нет элементов ListView.ItemTemplate и DataTemplate.

Это мой текущий ListView в моем Xamarin.Androidпроект

    <ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/WorkersListView"
    android:background="@android:color/darker_gray"
    android:layout_margin="2dp">
</ListView>

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

ListView в экземпляре Android требует Adapter для использования данных, содержащихся в представлениях строк.

Добавьте один элемент управления ListView и один элемент управления TextView для отображения списка элементов и элементов соответственно.Используйте следующий код.

<?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:background="#6BC6ED"  
>  
<TextView  
   android:id="@+id/Name"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content"   
   android:textSize="25dp"  
   android:textColor="#FFFFFF"  
/>  
<ListView  
   android:id="@+id/demolist"  
   android:layout_width="match_parent"  
   android:layout_height="wrap_content">   
</ListView>  
</LinearLayout>  

Подобно тому, что мы делали в Forms, создайте новый класс модели, который содержит свойство привязки в ViewCell.

Например,

public class Students {  
    public string Name {  
        get;  
        set;  
    }  
    public int Age {  
        get;  
        set;  
    }  
}

Далее необходимо создать адаптер для привязки данных к ListView.В Android имеется встроенный базовый класс адаптера для реализаций адаптера, который связывает ListView с источником данных.Кроме того, мы можем получить позицию элемента, количество и выбранный элемент и т. Д. Там.Метод Count используется для получения количества строк в списке.

Метод GetView используется для возврата View для каждой строки, заполненной каким элементом.

Метод GetItemId используется для возврата строкисвойства данных, такие как номер строки и значение.

public class StudentAdapter: BaseAdapter < Students > {  
    public List < Students > sList;  
    private Context sContext;  
    public StudentAdapter(Context context, List < Students > list) {  
        sList = list;  
        sContext = context;  
    }  
    public override Students this[int position] {  
        get {  
            return sList[position];  
        }  
    }  
    public override int Count {  
        get {  
            return sList.Count;  
        }  
    }  
    public override long GetItemId(int position) {  
        return position;  
    }  
    public override View GetView(int position, View convertView, ViewGroup parent) {  
        View row = convertView;  
        try {  
            if (row == null) {  
                row = LayoutInflater.From(sContext).Inflate(Resource.Layout.Main, null, false);  
            }  
            TextView txtName = row.FindViewById < TextView > (Resource.Id.Name);  
            txtName.Text = sList[position].Name;  
        } catch (Exception ex) {  
            System.Diagnostics.Debug.WriteLine(ex.Message);  
        } finally {}  
        return row;  
    }  
}  

Далее откройте файл активности и напишите приведенный ниже код, чтобы создать список элементов для отображения ListView и отображения выбранных элементов из списка.

private ListView studentlistView;  
private List < Students > mlist;  
StudentAdapter adapter;  
protected override void OnCreate(Bundle bundle) {  
    base.OnCreate(bundle);  
    // Set our view from the "main" layout resource  
    SetContentView(Resource.Layout.Main);  
    List < Students > objstud = new List < Students > ();  
    objstud.Add(new Students {  
        Name = "Jack", Age = 26  
    });  
    objstud.Add(new Students {  
        Name = "Mary", Age = 26  
    });  
    studentlistView = FindViewById < ListView > (Resource.Id.demolist);  
    mlist = new List < Students > ();  
    mlist = objstud;  
    adapter = new StudentAdapter(this, mlist);  
    studentlistView.Adapter = adapter;  
    studentlistView.ItemClick += StudentlistView_ItemClick;  
}  

Для обработки выбранных элементов, напишите следующий код.

private void StudentlistView_ItemClick(object sender, AdapterView.ItemClickEventArgs e) {  
    var select = mlist[e.Position].Name;  
    Android.Widget.Toast.MakeText(this, select, Android.Widget.ToastLength.Long).Show();  
}

Для более подробной информации вы можете проверить здесь .

0 голосов
/ 20 сентября 2019

Работа с ListView в Xamarin Forms и Xamarin для Android отличается

Добавьте XML, который выглядит примерно так:

<?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">  
<ListView  
    android:id="@+id/listView"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:fastScrollEnabled="true" />  
</LinearLayout>   

Затем создайте ListView шаблон

<?xml version="1.0" encoding="utf-8"?>  
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
android:orientation="horizontal"  
android:layout_width="fill_parent"  
android:layout_height="fill_parent"  
android:minWidth="25px"  
android:minHeight="25px"  
android:paddingBottom="4dp">  
<ImageView  
    android:id="@+id/photoImageView"  
    android:layout_width="60dp"  
    android:layout_height="60dp"  
    android:layout_alignParentLeft="true"  
    android:layout_centerVertical="true"  
    android:padding="5dp" />  
<TextView  
    android:id="@+id/nameTextView"  
    android:layout_toRightOf="@id/photoImageView"  
    android:text="Name"  
    android:textAppearance="?android:attr/textAppearanceLarge"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:paddingLeft="5dp" />  
<TextView  
    android:id="@+id/departmentTextView"  
    android:layout_toRightOf="@id/photoImageView"  
    android:layout_below="@id/nameTextView"  
    android:text="Department"  
    android:textAppearance="?android:attr/textAppearanceSmall"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:paddingLeft="5dp" />  
 </RelativeLayout>   

Создайте класс адаптера примерно так:

public class MyCustomListAdapter : BaseAdapter<User>  
{  
    List<User> users;  

    public MyCustomListAdapter(List<User> users)  
    {  
        this.users = users;  
    }  

    public override User this[int position]  
    {  
        get  
        {  
            return users[position];  
        }  
    }  

    public override int Count  
    {  
        get  
        {  
             return users.Count;  
        }  
    }  

    public override long GetItemId(int position)  
    {  
        return position;  
    }  

    public override View GetView(int position, View convertView, ViewGroup parent)  
    {  
        var view = convertView;  

        if(view==null)  
        {  
            view = LayoutInflater.From(parent.Context).Inflate(Resource.Layout.userRow, parent, false);  

            var photo = view.FindViewById<ImageView>(Resource.Id.photoImageView);  
            var name = view.FindViewById<TextView>(Resource.Id.nameTextView);  
            var department = view.FindViewById<TextView>(Resource.Id.departmentTextView);  

            view.Tag = new ViewHolder() { Photo = photo, Name = name, Department = department };  
        }  

        var holder = (ViewHolder)view.Tag;  

        holder.Photo.SetImageDrawable(ImageManager.Get(parent.Context, users[position].ImageUrl));  
        holder.Name.Text = users[position].Name;  
        holder.Department.Text = users[position].Department;  


        return view;  

    } 
}   

Подробный ответ в блоге: https://www.c -sharpcorner.com / article / creation-custom-listview-in-xamarin-Android-приложение /

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