答案 0 :(得分:0)
我根据您的屏幕截图编写了一个演示,您可以参考它。
MainActivity.cs
namespace ExpandListViewDemo1
{
[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
public class MainActivity : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.activity_main);
var listView = FindViewById<ExpandableListView>(Resource.Id.myExpandableListview);
listView.SetAdapter(new ExpandableDataAdapter(this, Data.SampleData()));
}
}
}
ExpandableDataAdapter.cs
namespace ExpandListViewDemo1
{
class ExpandableDataAdapter : BaseExpandableListAdapter
{
readonly Activity Context;
public ExpandableDataAdapter(Activity newContext, List<Data> newList) : base()
{
Context = newContext;
DataList = newList;
}
protected List<Data> DataList { get; set; }
public override View GetGroupView(int groupPosition, bool isExpanded, View convertView, ViewGroup parent)
{
View header = convertView;
if (header == null)
{
header = Context.LayoutInflater.Inflate(Resource.Layout.ListGroup, null);
}
header.FindViewById<TextView>(Resource.Id.DataHeader).Text = ((char)(65 + groupPosition)).ToString();
return header;
}
public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
row = Context.LayoutInflater.Inflate(Resource.Layout.DataListItem, null);
}
string newId = "", newValue = "";
GetChildViewHelper(groupPosition, childPosition, out newId, out newValue);
row.FindViewById<TextView>(Resource.Id.DataId).Text = newId;
row.FindViewById<TextView>(Resource.Id.DataValue).Text = newValue;
return row;
//throw new NotImplementedException ();
}
public override int GetChildrenCount(int groupPosition)
{
char letter = (char)(65 + groupPosition);
List<Data> results = DataList.FindAll((Data obj) => obj.Id[0].Equals(letter));
return results.Count;
}
public override int GroupCount
{
get
{
return 26;
}
}
private void GetChildViewHelper(int groupPosition, int childPosition, out string Id, out string Value)
{
char letter = (char)(65 + groupPosition);
List<Data> results = DataList.FindAll((Data obj) => obj.Id[0].Equals(letter));
Id = results[childPosition].Id;
Value = results[childPosition].Value;
}
#region implemented abstract members of BaseExpandableListAdapter
public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
{
throw new NotImplementedException();
}
public override long GetChildId(int groupPosition, int childPosition)
{
return childPosition;
}
public override Java.Lang.Object GetGroup(int groupPosition)
{
throw new NotImplementedException();
}
public override long GetGroupId(int groupPosition)
{
return groupPosition;
}
public override bool IsChildSelectable(int groupPosition, int childPosition)
{
return true;
}
public override bool HasStableIds
{
get
{
return true;
}
}
#endregion
}
}
DataAdapter.cs
class DataAdapter : BaseAdapter<Data>
{
readonly Activity context;
public DataAdapter(Activity newContext, List<Data> newData) : base()
{
context = newContext;
DataList = newData;
}
public List<Data> DataList { get; set; }
public override int Count
{
get
{
return DataList.Count;
}
}
public override View GetView(int position, View convertView, ViewGroup parent)
{
View newView = convertView; // re-use an existing view, if one is available
if (newView == null) // otherwise create a new one
newView = context.LayoutInflater.Inflate(Resource.Layout.DataListItem, null);
newView.FindViewById<TextView>(Resource.Id.DataId).Text = DataList[position].Id;
newView.FindViewById<TextView>(Resource.Id.DataValue).Text = DataList[position].Value;
return newView;
}
public override long GetItemId(int position)
{
return position;
}
public override Data this[int index]
{
get
{
return DataList[index];
}
}
}
Data.cs
class Data
{
public Data()
{
}
public static List<Data> SampleData()
{
var newDataList = new List<Data>();
newDataList.Add(new Data("Alabama", "Montegomery"));
newDataList.Add(new Data("Alaska", "Juneau"));
newDataList.Add(new Data("Arizona", "Pheonix"));
newDataList.Add(new Data("Arkansas", "Little Rock"));
newDataList.Add(new Data("California", "Sacramento"));
newDataList.Add(new Data("Colorado", "Denver"));
newDataList.Add(new Data("Connecticut", "Hartford"));
newDataList.Add(new Data("Delaware", "Dover"));
newDataList.Add(new Data("Florida", "Tallahassee"));
newDataList.Add(new Data("Georgia", "Atlanta"));
newDataList.Add(new Data("Hawaii", "Honolulu"));
newDataList.Add(new Data("Idaho", "Boise"));
newDataList.Add(new Data("Illinois", "Springfield"));
newDataList.Add(new Data("Indiana", "Indianapolis"));
newDataList.Add(new Data("Iowa", "Des Moines"));
newDataList.Add(new Data("Kansas", "Topeka"));
newDataList.Add(new Data("Kentucky", "Frankfort"));
newDataList.Add(new Data("Louisiana", "Baton Rouge"));
newDataList.Add(new Data("Maine", "Augusta"));
newDataList.Add(new Data("Maryland", "Annapolis"));
newDataList.Add(new Data("Massachusetts", "Boston"));
newDataList.Add(new Data("Michigan", "Lansing"));
newDataList.Add(new Data("Minnesota", "Saint Paul"));
newDataList.Add(new Data("Mississippi", "Jackson"));
newDataList.Add(new Data("Missouri", "Jefferson City"));
newDataList.Add(new Data("Montana", "Helena"));
newDataList.Add(new Data("Nebraska", "Lincoln"));
newDataList.Add(new Data("Nevada", "Carson City"));
newDataList.Add(new Data("New Hampshire", "Concord"));
newDataList.Add(new Data("New Jersey", "Trenton"));
newDataList.Add(new Data("New Mexico", "Santa Fe"));
newDataList.Add(new Data("New York", "Albany"));
newDataList.Add(new Data("North Calorina", "Raleigh"));
newDataList.Add(new Data("North Dakota", "Bismarck"));
newDataList.Add(new Data("Ohio", "Columbus"));
newDataList.Add(new Data("Oklahoma", "Oklahoma City"));
newDataList.Add(new Data("Oregon", "Salem"));
newDataList.Add(new Data("Pennsylvania", "Harrisburg"));
newDataList.Add(new Data("Rhode Island", "Providence"));
newDataList.Add(new Data("South Carolina", "Columbia"));
newDataList.Add(new Data("South Dakota", "Pierre"));
newDataList.Add(new Data("Tennessee", "Nashville"));
newDataList.Add(new Data("Texas", "Austin"));
newDataList.Add(new Data("Utah", "Salt Lake City"));
newDataList.Add(new Data("Vermont", "Montpelier"));
newDataList.Add(new Data("Virginia", "Richmond"));
newDataList.Add(new Data("Washington", "Olympia"));
newDataList.Add(new Data("West Virginia", "Charleston"));
newDataList.Add(new Data("Wisconsin", "Madison"));
newDataList.Add(new Data("Wyoming", "Cheyenne"));
return newDataList;
}
public Data(string newId = "Temporary Id", string newValue = "Temporary Data")
{
Id = newId;
Value = newValue;
}
public string Id { get; set; }
public string Value { get; set; }
}
Resources \ layout \ activity_main.axml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ExpandableListView
android:id="@+id/myExpandableListview"
android:minWidth="25px"
android:minHeight="25px"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
Resources \ layout \ DataListItem.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/DataRow"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/DataId"
android:text="Id"
android:layout_margin="2dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:background="#ff5684e3"
android:paddingStart="5dp"
android:paddingLeft="5dp" />
<TextView
android:text="Value"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/DataValue"
android:background="#ff366300"
android:layout_marginLeft="2dp"
android:layout_marginTop="2dp"
android:layout_marginRight="2dp"
android:layout_marginBottom="0dp"/>
</LinearLayout>
Resources \ layout \ ListGroup.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/DataHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="DataHeader"
android:layout_margin="2dp"
android:textStyle="bold"
android:paddingStart="50dp"
android:paddingLeft="50dp" />
</LinearLayout>
正在运行屏幕截图。
如果对此演示有任何疑问,可以在此处发布。