Android:是否可以在ListView中使用ListView?

琥珀色

是否可以创建一个ListView,其中每个子项都是一个ListView?

例如:假设ID为“ list”的ListView包含“ sublist”类型的项目,其中“ sublist”包含“ sublist_item”视图?

在list.xml中:

<ListView 
    android:id="@+id/list"
    ...
    tools:listitem="sublist"
/>

在sublist.xml中:

<ListView 
    android:id="@+id/sublist"
    ...
    tools:listitem="sublist_item"
/>

在sublist_item.xml中:

<LinearLayout 
    android:id="@+id/sublist_item"
    ...     >

     <TextView
         android:text="I'm a sublist-item"
         ...
     </TextView>
</LinearLayout>

我认为这种方法即使可行也不会是一个好方法-那么您将如何解决在Fragment中包含未知数量的ListView的问题?有点像这样:

<ScrollView 
    android:id="@+id/listview_container"
    ...   >

     <ListView
        android:id="@+id/list1"
        ...
     </ListView>

     <ListView
        android:id="@+id/list2"
        ...
     </ListView>

     ...


</ScrollView>

但是问题是,我不知道创建XML布局时所需的ListViews数量。

米歇尔·拉·费拉(Michele La Ferla)

我将使用类似于以下代码的可扩展列表视图:

主类(片段)

public class LineupFragment extends Fragment {

    View rootView;
    ExpandableListView lv;
    private String[] groups;
    private String[][] children;


    public LineupFragment() {

    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        groups = new String[] { "Test Header One", "Test Header Two", "Test Header Three", "Test Header Four" };

        children = new String [][] {
                { "s simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum." },
                { "Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old. Richard McClintock, a Latin professor at Hampden-Sydney College in Virginia, looked up one of the more obscure Latin words, consectetur, from a Lorem Ipsum passage, and going through the cites of the word in classical literature, discovered the undoubtable source. Lorem Ipsum comes from sections 1.10.32 and 1.10.33 of comes from a line in section 1.10.32." },
                { "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like)." },
                { "There are many variations of passages of Lorem Ipsum available, but the majority have suffered alteration in some form, by injected humour, or randomised words which don't look even slightly believable. If you are going to use a passage of Lorem Ipsum, you need to be sure there isn't anything embarrassing hidden in the middle of text. All the Lorem Ipsum generators on the Internet tend to repeat predefined chunks as necessary, making this the first true generator on the Internet. It uses a dictionary of over 200 Latin words, combined with a handful of model sentence structures, to generate Lorem Ipsum which looks reasonable. The generated Lorem Ipsum is therefore always free from repetition, injected humour, or non-characteristic words etc." }
        };
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_lineup, container, false);  

    return rootView;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        lv = (ExpandableListView) view.findViewById(R.id.expListView);
        lv.setAdapter(new ExpandableListAdapter(groups, children));
        lv.setGroupIndicator(null);
    }

    public class ExpandableListAdapter extends BaseExpandableListAdapter {

        private final LayoutInflater inf;
        private String[] groups;
        private String[][] children;

        public ExpandableListAdapter(String[] groups, String[][] children) {
            this.groups = groups;
            this.children = children;

            inf = LayoutInflater.from(getActivity());
        }

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

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

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

        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return children[groupPosition][childPosition];
        }

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

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

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

        @Override
        public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
             ViewHolder holder;
                if (convertView == null) {
                    convertView = inf.inflate(R.layout.list_item, parent, false);
                    holder = new ViewHolder();

                    holder.text = (TextView) convertView.findViewById(R.id.lblListItem);
                    convertView.setTag(holder);
                } else {
                    holder = (ViewHolder) convertView.getTag();
                }


                holder.text.setText(getChild(groupPosition, childPosition).toString());

                return convertView;
        }

        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) {
                convertView = inf.inflate(R.layout.list_group, parent, false);

                holder = new ViewHolder();
                holder.text = (TextView) convertView.findViewById(R.id.lblListHeader);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.text.setText(getGroup(groupPosition).toString());

            ImageView Photo = (ImageView) convertView.findViewById(R.id.photo);


            //Images for all artists need to be hardcoded below

            if (groupPosition == 0) {
                Photo.setBackgroundResource(R.drawable.ivan_grech);
            }
            else if (groupPosition == 1) {
                Photo.setBackgroundResource(R.drawable.ira_losco);
            }

            return convertView;
        }

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

        private class ViewHolder {
            TextView text;
        }
    }
}

适配器类:

public class ExpandableListAdapter extends BaseExpandableListAdapter {

    private Activity _context;
    private List<String> _listDataHeader; // header titles
    private HashMap<String, List<String>> _listDataChild;// child data in format of header title, child title

    public ExpandableListAdapter(Activity context, List<String> listDataHeader,
            HashMap<String, List<String>> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosititon);
    }

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

    @Override
    public View getChildView(int groupPosition, final int childPosition,
            boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem);

        txtListChild.setText(childText);
        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
            View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
        }

        TextView lblListHeader = (TextView) convertView.findViewById(R.id.lblListHeader);
        lblListHeader.setTypeface(null, Typeface.BOLD);
        lblListHeader.setText(headerTitle);

        return convertView;
    }

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

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

希望这可以帮助 :)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android:是否可以在ListView中使用ListView?

来自分类Dev

是否可以在Android中使用文本字段和复选框构建listview?

来自分类Dev

在Android ListView中使用onScroll

来自分类Dev

可以在NativeScript的SideDrawer中使用ListView吗?

来自分类Dev

如何使用listview在android中使用restartloader

来自分类Dev

Android在ListView中使用Picasso和TextDrawable

来自分类Dev

ListView在android中使用数据库

来自分类Dev

如何在Android Fragment中使用ListView

来自分类Dev

在Android中使用ListView进行处理

来自分类Dev

如何在Android中使用嵌套的Listview

来自分类Dev

ListView在android中使用数据库

来自分类Dev

在android中使用firebase数据填充ListView

来自分类Dev

如何在listview android中使用notifyDataSetAdapter?

来自分类Dev

在ListView中使用QAbstractListModel

来自分类Dev

是否可以在Android中将Listview项目安排为图块

来自分类Dev

是否可以将不同的项目添加到android listview

来自分类Dev

我可以在ListPreference中使用其他类型的ListView吗?

来自分类Dev

使用Ayntask在Android中使用Listview进行Json解析

来自分类Dev

在ListView Android中使用进度条下载多个文件

来自分类Dev

在Android中使用List <String>制作自定义ListView

来自分类Dev

如何在Android中使ListView与ArrayAdapter一起使用

来自分类Dev

Xamarin android中使用edittext的即时搜索功能到listview

来自分类Dev

我如何在ListView Android中使用我的JsonArray?

来自分类Dev

从服务器获取数据时在Android中使用Listview

来自分类Dev

如何在Android中使ListView与ArrayAdapter一起使用

来自分类Dev

在 ListView android 中使用 Fragment 时出现 NullReferenceException

来自分类Dev

在ScrollView中使用DragNDrop Listview

来自分类Dev

在分组的ListView中使用ItemsControl

来自分类Dev

是否可以用List填充ListView

Related 相关文章

  1. 1

    Android:是否可以在ListView中使用ListView?

  2. 2

    是否可以在Android中使用文本字段和复选框构建listview?

  3. 3

    在Android ListView中使用onScroll

  4. 4

    可以在NativeScript的SideDrawer中使用ListView吗?

  5. 5

    如何使用listview在android中使用restartloader

  6. 6

    Android在ListView中使用Picasso和TextDrawable

  7. 7

    ListView在android中使用数据库

  8. 8

    如何在Android Fragment中使用ListView

  9. 9

    在Android中使用ListView进行处理

  10. 10

    如何在Android中使用嵌套的Listview

  11. 11

    ListView在android中使用数据库

  12. 12

    在android中使用firebase数据填充ListView

  13. 13

    如何在listview android中使用notifyDataSetAdapter?

  14. 14

    在ListView中使用QAbstractListModel

  15. 15

    是否可以在Android中将Listview项目安排为图块

  16. 16

    是否可以将不同的项目添加到android listview

  17. 17

    我可以在ListPreference中使用其他类型的ListView吗?

  18. 18

    使用Ayntask在Android中使用Listview进行Json解析

  19. 19

    在ListView Android中使用进度条下载多个文件

  20. 20

    在Android中使用List <String>制作自定义ListView

  21. 21

    如何在Android中使ListView与ArrayAdapter一起使用

  22. 22

    Xamarin android中使用edittext的即时搜索功能到listview

  23. 23

    我如何在ListView Android中使用我的JsonArray?

  24. 24

    从服务器获取数据时在Android中使用Listview

  25. 25

    如何在Android中使ListView与ArrayAdapter一起使用

  26. 26

    在 ListView android 中使用 Fragment 时出现 NullReferenceException

  27. 27

    在ScrollView中使用DragNDrop Listview

  28. 28

    在分组的ListView中使用ItemsControl

  29. 29

    是否可以用List填充ListView

热门标签

归档