Xamarin如何将自定义列表视图添加到片段

时间:2018-03-17 23:10:52

标签: android xamarin xamarin.android

我是Xamarin Android的新手。我想询问如何将自定义列表视图应用于片段。我创建了一个包含ListView的活动,然后我为将应用于listview的自定义元素创建了另一个视图。我有一个自定义适配器,我有一个片段,我试图应用自定义列表视图,但我收到一个null,如下所示:

public class PeopleFragment : Fragment
{

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {

        var view = inflater.Inflate(Resource.Layout.PeoplesCustomView, container, false);
        var peopleList = GetList();
        // Below code listView is null 
        var listView = view.FindViewById<ListView>(Resource.Id.standardListView);
        listView.Adapter = new TestAdapter(this, peopleList);

        return view;

    }
}

这是否可能是由于第一行上的视图在充实资源布局时出现的问题&#39; PeopleCustomView&#39;它查看此视图​​以查找&#34; standardListview&#34;的ID 我做错了什么?

1 个答案:

答案 0 :(得分:2)

PeoplesCustomView应该是您的片段布局,而不是列表行的布局。
例如:
Main.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">
    <fragment
        class="fragmentListview.Fragment1"
        android:id="@+id/titles_fragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

fragment.xaml

<?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/standardListView" />
</LinearLayout>

Fragment1.cs

public class Fragment1 : Fragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = inflater.Inflate(Resource.Layout.ListItem, container, false);

        var listView = view.FindViewById<ListView>(Resource.Id.standardListView);
        listView.Adapter = new TestAdapter(this.Context as Activity);

        return view;            
    }
}

TestAdapter.cs

public class TestAdapter : BaseAdapter
{
    List<string> _List = new List<string>();
    Activity _activity;

    public TestAdapter(Activity activity)
    {
        _activity = activity;
        FillContacts();
    }

    public override int Count => _List.Count;

    public override Java.Lang.Object GetItem(int position)
    {
        return _List[position];
    }

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

    public override View GetView(int position, View convertView, ViewGroup parent)
    {
        var view = convertView ?? _activity.LayoutInflater.Inflate(
    Resource.Layout.ListItem, parent, false);
        var ListText = view.FindViewById<TextView>(Resource.Id.ListText);
        var ListImage = view.FindViewById<ImageView>(Resource.Id.ListImage);
        ListText.Text = _List[position];

        return view;
    }

    void FillContacts()
    {
        _List.Add("First");
        _List.Add("Second");
        _List.Add("Third");
    }
}

ListItem.axml

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/ListImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_margin="5dp" />
    <TextView
        android:id="@+id/ListText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_marginLeft="5dp" />
</LinearLayout>