gpt4 book ai didi

Android 可扩展 ListView fragment

转载 作者:太空宇宙 更新时间:2023-11-03 13:30:20 25 4
gpt4 key购买 nike

我正在寻找实现具有可扩展 ListView 的 fragment 。搜索后,我发现了一个在 https://gist.github.com/1316903 上实现可扩展 ListView fragment 的类.但我不知道如何使用它。请帮我。我尝试了列表 fragment ,但我不知道如何使用具有可扩展 ListView 的 fragment ,在此先感谢。

最佳答案

这是我在 MonoDroid/C# 中得到的。我不得不剥离一些代码(为了保密),但它应该大部分是完整的。

此实现可以支持不同的 subview ,其中每个组都包含一个特定的子类型,该子类型在整个组中都是相同的。但是,您可以在一个组中混合使用子类型,甚至可以有不同的组类型(这只会真正改变组标题;我对两个组使用相同的组类型,并使用组的位置来确定子-类型 - 因此 group[0] 包含 ExpandableListChild1 的子级和 ExpandableListChild2 的 group[1] - 预期用途)。

此处的子类型仅在背景颜色上有所不同(为简单起见),但是这些 View 可以是您需要的任何 View ,包括自定义 View 。只需为您需要的任何 View 制作相应的 ExpandListChild 子类。此外,基类 ExpandListChildAbs 可以是您需要的任何适合您的应用程序的内容。如果您只有一个子类型,则不需要基类,但是如果有两个或更多,则您需要某种基类,这两种子类型都可以从中继承以支持 BaseExpandableListAdapter 方法 getChild 和相关方法中的多态性.

[Activity(
Label = "ExpandableListView in a Fragment",
Theme = "@android:style/Theme.NoTitleBar",
MainLauncher = false,
ConfigurationChanges = ConfigChanges.KeyboardHidden,
WindowSoftInputMode = SoftInput.AdjustPan | SoftInput.StateHidden)]

public class Fragment1 : Fragment
{
private ViewGroup _thisView;

private Bundle _bundle;
private LayoutInflater _inflater;
private ViewGroup _container;

public override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

_bundle = bundle;
_model = Model;
}

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
base.OnCreateView(inflater, container, bundle);

_inflater = inflater;
_container = container;
_bundle = bundle;

Render();

return _thisView;
}

public override void OnAttach(Activity activity)
{
base.OnAttach(activity);

_dialogListener = (IDialogWindow)activity;
}

//public Context LocalContext { get; set; }

public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
}

public override void OnViewCreated(View view, Bundle savedInstanceState)
{
base.OnViewCreated(view, savedInstanceState);
}

public override void Render()
{
_thisView = (ViewGroup)_inflater.Inflate(Resource.Layout.MainLayout, _container, false);

ExpandableListView elvParcelInfo = _thisView.FindViewById<ExpandableListView>(Resource.Id.elv_parcel_info);
List<ExpandListGroup> expandListItems = SetStandardGroups();
ExpandListAdapter expandListAdapter = new ExpandListAdapter(Activity.ApplicationContext, expandListItems);
elvParcelInfo.SetAdapter(expandListAdapter);
}

public List<ExpandListGroup> SetStandardGroups()
{
List<ExpandListChild1> childern1 = new List<ExpandListChild1>();

for (int i = 0; i < 20; i++)
{
ExpandListChild1 child1 = new ExpandListChild1();
child1.Name = "child1 #" + i.ToString();
child1.Tag = null;

childern1.Add(child1);
}

ExpandListGroup group1 = new ExpandListGroup();
group1.Name = "Comedy";
//group1.Items = childern1;
group1.Items = new List<ExpandListChildAbs>();
foreach (ExpandListChild1 child1 in childern1)
{
group1.Items.Add(child1);
}

/////////////////////////////////////////////////////////////

List<ExpandListChild2> childern2 = new List<ExpandListChild2>();

for (int i = 0; i < 20; i++)
{
ExpandListChild2 child2 = new ExpandListChild2();
child2.Name = "child2 #" + i.ToString();
child2.Tag = null;

childern2.Add(child2);
}

ExpandListGroup group2 = new ExpandListGroup();
group2.Name = "Action";
//group2.Items = childern2;
group2.Items = new List<ExpandListChildAbs>();
foreach (ExpandListChild2 child2 in childern2)
{
group2.Items.Add(child2);
}

/////////////////////////////////////////////////////////////

List<ExpandListGroup> groups = new List<ExpandListGroup>();
groups.Add(group1);
groups.Add(group2);

return groups;
}

public abstract class ExpandListChildAbs : Java.Lang.Object
{
public abstract String Name { get; set; }
public abstract String Tag { get; set; }
}

public class ExpandListChild1 : ExpandListChildAbs
{
public override String Name { get; set; }
public override String Tag { get; set; }
}

public class ExpandListChild2 : ExpandListChildAbs
{
public override String Name { get; set; }
public override String Tag { get; set; }
}

public class ExpandListGroup : Java.Lang.Object
{
public String Name { get; set; }
public List<ExpandListChildAbs> Items { get; set; }
}

public class ExpandListAdapter : BaseExpandableListAdapter
{
private enum ChildTypes { ChildType1, ChildType2 }
private Context context;
private List<ExpandListGroup> groups;

public ExpandListAdapter(Context context, List<ExpandListGroup> groups)
{
this.context = context;
this.groups = groups;
}

public void AddItem(ExpandListChildAbs item, ExpandListGroup group)
{
if (!groups.Contains(group))
{
groups.Add(group);
}

int index = groups.IndexOf(group);

List<ExpandListChildAbs> ch = groups[index].Items;

ch.Add(item);
groups[index].Items = ch;
}

public override bool HasStableIds
{
get { return true; }
}

public override bool IsChildSelectable(int arg0, int arg1)
{
return true;
}

//______________________________________________________________________________________________________
// Get Child Methods
//______________________________________________________________________________________________________

public override long GetChildId(int groupPosition, int childPosition)
{
return childPosition;
}

public override int GetChildrenCount(int groupPosition)
{
List<ExpandListChildAbs> chList = groups[groupPosition].Items;

return chList.Count;
}

public override int ChildTypeCount
{
get { return Enum.GetNames(typeof(ChildTypes)).Length; }
}

public override int GetChildType(int groupPosition, int childPosition)
{
//return base.GetChildType(groupPosition, childPosition);

if (groupPosition == 0)
{
return (int)ChildTypes.ChildType1;
}

if (groupPosition == 1)
{
return (int)ChildTypes.ChildType2;
}

return 0;
}

public override Java.Lang.Object GetChild(int groupPosition, int childPosition)
{
List<ExpandListChildAbs> chList = groups[groupPosition].Items;

return chList[childPosition];
}

public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View view, ViewGroup parent)
{
int ChildType = GetChildType(groupPosition, childPosition);

if (ChildType == (int)ChildTypes.ChildType1)
{
return GetChildView_ChildType1(groupPosition, childPosition, isLastChild, view, parent);
}

if (ChildType == (int)ChildTypes.ChildType2)
{
return GetChildView_ChildType2(groupPosition, childPosition, isLastChild, view, parent);
}

return null;
}

private View GetChildView_ChildType1(int groupPosition, int childPosition, bool isLastChild, View view, ViewGroup parent)
{
ExpandListChild1 child1 = (ExpandListChild1)GetChild(groupPosition, childPosition);

if (view == null)
{
LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);

view = infalInflater.Inflate(Resource.Layout.ExpandList_ChildItem1, null);
}

TextView tv = view.FindViewById<TextView>(Resource.Id.tvChild1);

tv.Text = child1.Name;
tv.Tag = child1.Tag;

return view;
}

private View GetChildView_ChildType2(int groupPosition, int childPosition, bool isLastChild, View view, ViewGroup parent)
{
ExpandListChild2 child2 = (ExpandListChild2)GetChild(groupPosition, childPosition);

if (view == null)
{
LayoutInflater infalInflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);

view = infalInflater.Inflate(Resource.Layout.ExpandList_ChildItem2, null);
}

TextView tv = view.FindViewById<TextView>(Resource.Id.tvChild2);

tv.Text = child2.Name;
tv.Tag = child2.Tag;

return view;
}

//________________________________________________________________________________________________________


//______________________________________________________________________________________________________
// Get Group Methods
//______________________________________________________________________________________________________

public override long GetGroupId(int groupPosition)
{
return groupPosition;
}

public override int GroupCount
{
get { return groups.Count; }
}

public override int GroupTypeCount
{
get { return base.GroupTypeCount; }
}

public override int GetGroupType(int groupPosition)
{
return base.GetGroupType(groupPosition);
}

public override Java.Lang.Object GetGroup(int groupPosition)
{
return groups[groupPosition];
}

public override View GetGroupView(int groupPosition, bool isLastChild, View view, ViewGroup parent)
{
ExpandListGroup group = (ExpandListGroup) GetGroup(groupPosition);

if (view == null)
{
LayoutInflater inf = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);

view = inf.Inflate(Resource.Layout.ExpandList_GroupItem, null);
}

TextView tv = view.FindViewById<TextView>(Resource.Id.tvGroup);

tv.Text = group.Name;

return view;
}

//________________________________________________________________________________________________________
}
}

主布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_left_parcel"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#FF8F8D8F">

<ExpandableListView
android:id="@+id/elv_parcel_info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFCFCDCF"
android:groupIndicator="@null"/>

</LinearLayout>

ExpandList_GroupItem

<?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="55dip"
android:background="#FF00AA55"
android:orientation="vertical" >


<TextView
android:id="@+id/tvGroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:textColor="#FF000000"
android:textSize="17dip" />

</LinearLayout>

ExpandList_ChildItem1

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dip"
android:background="#FF8800CC"
android:orientation="vertical" >

<TextView
android:id="@+id/tvChild1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FF000000"
android:textSize="17dip" />

</LinearLayout>

ExpandList_ChildItem2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dip"
android:background="#FFAA00FF"
android:orientation="vertical" >

<TextView
android:id="@+id/tvChild2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FF000000"
android:textSize="17dip" />

</LinearLayout>

关于Android 可扩展 ListView fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14274392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com