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的主要内容,如果未能解决你的问题,请参考以下文章
Flutter:嵌套 ListView 有效。嵌套的 SliverList 没有,但 ListView 包含 Sliver