【问题标题】:Expandable List view with different children具有不同子项的可扩展列表视图
【发布时间】:2017-09-19 14:17:20
【问题描述】:

我正在尝试制作每个组的最后一个孩子并编辑文本和一个按钮。我正在使用自定义 ExpandableListViewAdapter。这是我目前所拥有的。

  public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
            convertView = inflater.Inflate(Resource.Layout.Children, null);
        }
        if (isLastChild==true)
        {
            EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
            Button button = convertView.FindViewById<Button>(Resource.Id.Button);
            TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
            textViewItem.Visibility = ViewStates.Gone;
        }

        else {
            TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
            EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
            Button button = convertView.FindViewById<Button>(Resource.Id.Button);
            button.Visibility = ViewStates.Gone;
            Submit.Visibility = ViewStates.Gone;
            string content = (string)GetChild(groupPosition, childPosition);
            textViewItem.Text = content;
        }
        return convertView;
    }

这有助于在第一组中放置一个 EditText 和 Button,同时还切断了第一组中的一些子项。

【问题讨论】:

    标签: xamarin xamarin.android expandablelistview


    【解决方案1】:

    这有助于在第一组中放置一个 EditText 和 Button,同时还切断了第一组中的一些子项。

    ExpandableListView 重用子视图,因此如果您希望最后一行成为您的按钮和编辑文本,则需要将其显式设置为可见。只需在您的 GetChildView 方法中添加三行代码:

    public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService);
            convertView = inflater.Inflate(Resource.Layout.Children, null);
        }
        if (isLastChild == true)
        {
            EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
            Button button = convertView.FindViewById<Button>(Resource.Id.Button);
    
            //add below two lines to your codes
            Submit.Visibility = ViewStates.Visible;
            button.Visibility = ViewStates.Visible;
    
            TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
            textViewItem.Visibility = ViewStates.Gone;
        }
        else
        {
            TextView textViewItem = convertView.FindViewById<TextView>(Resource.Id.DataValue);
            EditText Submit = convertView.FindViewById<EditText>(Resource.Id.Submit);
            Button button = convertView.FindViewById<Button>(Resource.Id.Button);
            button.Visibility = ViewStates.Gone;
            Submit.Visibility = ViewStates.Gone;
            //also add below line of codes
            textViewItem.Visibility = ViewStates.Visible;
    
            string content = (string)GetChild(groupPosition, childPosition);
            textViewItem.Text = content;
        }
        return convertView;
    }
    

    【讨论】:

    • 这非常适合将它放在底部,但是一旦我打开一个孩子较少的小组,孩子较多的小组最终会删除一些信息。当我打开多个组时,它也摆脱了一些孩子!不知道这里发生了什么!
    • 抱歉,没有注意到textViewItem。您还需要将textViewItem.Visiblity 显式设置为可见。我已经更新了答案,请检查一下。
    • 非常感谢!这将是现在所有的麻烦!我一直在靠近,只是稍微偏离了一点,但在你的帮助下,我做得很好!
    • 夏,我想知道你是否可以帮助我解决我的扩展问题......目前还没有人回答,你可以提供最大的帮助。我在网上找不到任何东西,而且 android 数据库没有足够的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2015-05-04
    • 2016-02-15
    相关资源
    最近更新 更多