我是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 我做错了什么?
答案 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>