java - 使用 while 循环将多个 LinearLayout 添加到滚动视图中
问题描述
我想在我的 ScrollView 中添加多个 LinearLayout,LinearLayout 的数量取决于从 MySQL 数据库中选择了多少数据。但是,似乎不能在 ScrollView 中添加多个 LinearLayout。
原因可能是这样的:指定的孩子已经有了父母。您必须首先在孩子的父母上调用 removeView()。但我不确定真正的原因。我怎么解决这个问题?这是我在 Android Studio 中的编码:
String query = "select * from restaurant";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
LinearLayout data_big_layout, detail_data_layout;
TextView name, type_area, price_txt;
ImageView restaurant_img;
LinearLayout.LayoutParams restaurant_img_params, data_big_params;
while(rs.next()){
data_big_layout = new LinearLayout(this);
data_big_params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
data_big_params.setMargins(0,15,0,0);
data_big_layout.setLayoutParams(data_big_params);
data_big_layout.setOrientation(LinearLayout.HORIZONTAL);
data_big_layout.setWeightSum(20);
data_big_layout.setBackgroundColor(Color.WHITE);
data_big_layout.setTag(rs.getInt(1));
detail_data_layout = new LinearLayout(this);
lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT,8.0f);
detail_data_layout.setLayoutParams(lparams);
detail_data_layout.setOrientation(LinearLayout.VERTICAL);
detail_data_layout.setPadding(50,0,0,0);
lparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
name = new TextView(this);
name.setLayoutParams(lparams);
name.setText(rs.getString(2));
name.setTextSize(24);
name.setTypeface(Typeface.DEFAULT_BOLD);
type_area = new TextView(this);
type_area.setLayoutParams(lparams);
type_area.setText(rs.getString(5)+"/"+rs.getString(6));
type_area.setTextSize(18);
price_txt = new TextView(this);
price_txt.setLayoutParams(lparams);
price_txt.setText(rs.getString(7));
price_txt.setTextSize(18);
detail_data_layout.addView(name);
detail_data_layout.addView(type_area);
detail_data_layout.addView(price_txt);
data_big_layout.addView(detail_data_layout);
restaurant_img = new ImageView(this);
restaurant_img_params = new LinearLayout.LayoutParams(200,
300,12.0f);
restaurant_img.setImageResource(R.drawable.test_restaurant);
restaurant_img.setPadding(0,0,50,0);
data_big_layout.addView(restaurant_img, restaurant_img_params);
Toast.makeText(getBaseContext(),"ID: "+rs.getInt(1), Toast.LENGTH_LONG).show();
data_scroll_view.addView(data_big_layout); //Cannot add data_big_layout in the next loop
z = "Search successful";
}
isSuccess = true;
stmt.close();
rs.close();
con.close();
代码data_scroll_view.addView(data_big_layout); 只能在while循环的第一次运行。我选择了两行数据,但程序中的输出只能显示一个 LinearLayout。我该如何解决?谢谢大家。
解决方案
滚动视图只能包含一个孩子
滚动视图中可能只有一个直接子视图。谷歌文档
因此,在您的循环内,您应该将您的视图收集到一个垂直的 LinearLayout 中,然后将其添加到循环外的 ScrollView 中。
推荐阅读
- amazon-web-services - ICMP“ping”在我的 EC2 实例上不起作用,如何解决?
- redis - 如何在stackexchange redis中连接到默认数据库(0)以外的其他数据库(1到15)?
- javascript - 如何以最佳方式使用 async/await Protractor
- python - 如何使用 Seaborn countplot 并排绘制多列
- excel - vba 中的应用程序定义或对象定义错误在 vlookup 公式中
- url - 获取错误的 URL
- python - pyOpenGL 2D 图像倾斜绘制
- r - 是否有 R 函数来创建 Square 序列
- python-3.x - 如何在 Python 中打印马拉地语字符“”?
- oracle - Apache Kafka 用于使用 Oracle DB 的现有获取请求