ListView 包含 ListView

Posted

技术标签:

【中文标题】ListView 包含 ListView【英文标题】:ListView containing ListView 【发布时间】:2013-06-10 15:23:54 【问题描述】:

我需要显示一个包含另一个 listView 的 listView。

这是我如何显示第一个 listView :

    public class myClas extends ListActivity 

        private List<Order> listOrders = new ArrayList<Order>();
        private ArrayList<HashMap<String, String>> orderList, orderItems;
        private ProgressDialog pDialog;

        /**
         * First method called when the activity is created
         * @param Bundle savedInstanceState contains the backup status recorded during the last execution of the activity
         */
        @Override
        protected void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_historic);

            //hashmap
            orderList = new ArrayList<HashMap<String, String>>();
            orderItems = new ArrayList<HashMap<String, String>>();

            //loading in the background
            new LoadingOrders().execute();
        

        /**
         * Loading orders in the background
         * */
        class LoadingOrders extends AsyncTask<String, String, String> 

            /**
             * Before starting the thread in the background, a progress bar is displayed
             * */
            @Override
            protected void onPreExecute() 
                super.onPreExecute();
                pDialog = new ProgressDialog(Historic.this);
                pDialog.setMessage("Loading");
                pDialog.setIndeterminate(false);
                pDialog.setCancelable(false);
                pDialog.show();
            

            /**
             * Retrieving orders
             * */
            @Override
            protected String doInBackground(String... args) 
//the first listView                
for (int i = 0; i < listOrders.size(); i++) 
                    HashMap<String, String> map = new HashMap<String, String>();
                    map.put("date", "date_exemple);
                    orderList.add(map);

//the second listView  
                    for (int j = 0; j < order.getOrderItems().size(); j++) 
                        HashMap<String, String> mapItems = new HashMap<String, String>();

                        mapItems.put("textViewPrice", "price_exemple"));
                        mapItems.put("textViewStatus", "status_example");
                        orderList.add(map);
                    
                
                return null;
            

            /**
             * After completing the background tasks, remove the progress bar
             * **/
            @Override
            protected void onPostExecute(String file_url) 
                //The progress bar is removed
                pDialog.dismiss();
                // Update the user interface
                runOnUiThread(new Runnable() 
                    @Override
                    public void run() 
//the first listView  
                        //Updating orders
                        ListAdapter adapter = new SimpleAdapter(
                                MyClass.this, orderList,
                                R.layout.order, new String[]  "date",
                                new int[]  R.id.textViewDate);
                        setListAdapter(adapter);

//the second listView  
                        //OrderItems
                        **adapter = new SimpleAdapter(
                                MyClass.this, orderItems,
                                R.layout.order_item, new String[]  "textViewPrice", "textViewStatus",
                                new int[]  R.id.textViewPrice, R.id.textViewStatus);
                        setListAdapter(adapter);**
                    
                );

            

        
    

对于第一个 listView,没关系,但是最后的行(带有第二个适配器 **)它失败了。我不知道我是否可以使用这样的第二个适配器...

我该怎么做?

谢谢。

【问题讨论】:

这是一个坏主意,将一个列表放在另一个列表中,而是尝试一个具有许多线性布局的列表。 错误的想法,但并非不可能?否则,我如何使用 linerlayouts 来做到这一点? 你会同时出现两个滚动条的问题,考虑使用expandablelistview。 外部列表具有空线性布局(或其他)的行布局,内部假列表具有您想要的行布局,在适配器的 getView 方法中,您可以动态创建/膨胀您的视图并将其添加到线性布局。 好的。那么,我必须连续使用 expandablelistview 或 linerlayouts 吗? 【参考方案1】:

对于行内衬里布局,我可以用这个吗?

Creating LinearLayout in Java - Elements are not shown

但是,在这段代码的末尾,我不能执行 setContentView(layout),因为包含我的列表的布局将会消失。那我该怎么做呢?

【讨论】:

【参考方案2】:

你为什么不使用ExpandableListView

将一个 ListView 嵌套在另一个 ListView 中可能会非常麻烦。尤其是处理child和parent内部的滚动事件。

是的,这可能不是不可能的,但为什么要让你的生活变得艰难呢?

【讨论】:

以上是关于ListView 包含 ListView的主要内容,如果未能解决你的问题,请参考以下文章

使包含 ListView 的整个布局可滚动

Flutter:嵌套 ListView 有效。嵌套的 SliverList 没有,但 ListView 包含 Sliver

ListView 包含一个多行文本字段,后跟 Flutter 中的 ListTiles

在 ListView 顶部包含浮动操作按钮

在包含 ListView (Android) 的视图中滚动

具有包含 CheckBoxes 的自定义适配器的 Listview