【问题标题】:How to create an expandablelistadapter with array lists dynamically in Android如何在Android中动态创建带有数组列表的expandablelistadapter
【发布时间】:2013-12-02 11:41:21
【问题描述】:

我正在尝试使用在运行时更新父元素和子元素的适配器创建一个可扩展的列表视图。我有一个父元素的数组列表和一个子元素的数组列表。父对象是一个名为“Group”的对象数组列表,每个组都有一个名为“Item”的对象数组列表。所以 Group 是父元素,Item 是子元素。

我目前有一个可扩展的列表视图,它只对父元素和子元素中的字符串使用固定数组。我需要知道如何在运行时使用数组列表动态地做到这一点。请任何人都可以帮我解决这个问题。提前致谢。

这是我目前的可扩展列表视图代码:

public class ConfigAdapter extends BaseExpandableListAdapter
{

private Activity activity;
public String []parentList = {"parent1", "parent2", "parent3", "parent4", 
                                        "parent5", "parent6", "parent7"}; // String array for parent list text views
public String [][]childList = {
        {
            "parent1 child1", "parent1 child2", "parent1 child3", "parent1 child4"
        },
        {
            "parent2 child1", "parent2 child2"
        },
        {
            "parent3 child1", "parent3 child2"
        },
        {
            "parent4 child1", "parent4 child2", "parent4 child3"
        },
        {
            "parent5 child1", "parent5 child2", "parent5 child3"
        },
        {
            "parent6 child1"
        },
        {
            "parent7 child1", "parent7 child2", "parent7 child3"
        }

}; // String array for child list text views

public ConfigAdapter()
{
    assert "Default constructor not used." != null; // Assert to prompt not to use this constructor.
}

public ConfigAdapter(Activity refActivity) 
{
    this.activity = refActivity;
}

public void setPage(Page refPage)
{
    page = refPage;
}

public Page getPage()
{
    return page;
}

@Override
public Object getChild(int groupPosition, int childPosition) 
{
    return null;
}

@Override
public long getChildId(int groupPosition, int childPosition) 
{
    return 0;
}

@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) 
{
    LayoutInflater childLayoutInflater = (LayoutInflater) activity.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View childView = childLayoutInflater.inflate(R.layout.config_child_list_view, null);
    TextView itemTextView = (TextView) childView.findViewById(R.id.configListTextView1);
    itemTextView.setText(childList[groupPosition][childPosition]);
    final ViewSwitcher childViewSwitcher = (ViewSwitcher) childView.findViewById(R.id.configListViewSwitcher);
    final TextView dataObjectTextView = (TextView) childViewSwitcher.findViewById(R.id.configListTextView2);
    dataObjectTextView.setText("99 99 999 99 9 9 999 9  9 99 99999  9999  9999");
    final EditText dataObjectEditText = (EditText) childViewSwitcher.findViewById(R.id.configEditText1);
    dataObjectEditText.setHint("hello");

    childViewSwitcher.setOnClickListener(new OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            if(childViewSwitcher.getCurrentView() == dataObjectTextView)
            {
                childViewSwitcher.showNext();
            }

        }
    });
    {

    }

    return childView;
}

@Override
public int getChildrenCount(int groupPosition) 
{
    return childList[groupPosition].length;
}

@Override
public Object getGroup(int groupPosition) 
{
    return groupPosition;
}

@Override
public int getGroupCount() 
{
    return parentList.length;
}

@Override
public long getGroupId(int groupPosition) 
{
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 
{
    TextView tvParent = new TextView(activity);
    tvParent.setText(parentList[groupPosition]);
    tvParent.setPadding(10, 20, 10, 20);
    tvParent.setTextSize(18);
    tvParent.setTypeface(null, Typeface.BOLD); // Sets text to bold

    return tvParent;
}

@Override
public boolean hasStableIds() 
{
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) 
{
    return true;
}

}

【问题讨论】:

  • 您的问题是什么,您需要什么帮助?

标签: android dynamic arraylist expandablelistview expandablelistadapter


【解决方案1】:

我猜你的ExpandableList 的数据是在运行时填充的,所以你要做的是,当你在运行时获取数据时,你必须将它们加载到你的Arrays 中。如果有重复元素的机会,您也必须处理它。当您将它们加载到您的 Arrays for parents 和 Childs 中后,您必须通知您的 Adapter 数据集已通过以下方法更改。

adapter.notifyDatasetChanged();

【讨论】:

  • 我认为我实际上需要一个 String[] 用于组。项目的 String[][] 和数据对象的 String[][][] 是与每个项目关联的值。是否可以从数组列表中的对象数据集执行此操作?我在子视图中有一个视图,文本视图彼此相邻,能够在一个中保存一个项目,在另一个中保存一个数据对象。
【解决方案2】:

ArrayList<String> parentList 用于组,List<ArrayList<Sring>> childList 用于儿童。

@Override
public int getChildrenCount(int groupPosition) 
{
    return childList.get(groupPosition).size();
}

@Override
public int getGroupCount() 
{
    return parentList.size();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-28
    • 2015-11-08
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多