簡體   English   中英

使用while循環在滾動視圖中添加多個LinearLayout

[英]Adding more than one LinearLayout into scrollview using while loop

我想在我的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。 我該如何解決? 謝謝大家

滾動視圖只能包含一個孩子

滾動視圖中可能只有一個直接子級。 Google文件

因此,在循環內部,應將視圖收集到單個垂直LinearLayout中,然后將其添加到循環外部的ScrollView中。

參考https://developer.android.com/reference/android/widget/ScrollView

ScrollView是“一個視圖組,它允許滾動其中放置的視圖層次結構。滾動視圖中可能只有一個直接子級。

要在滾動視圖中添加多個視圖,請使直接子級添加一個視圖組,例如LinearLayout ,然后在該LinearLayout放置其他視圖。

因此, LinearLayouts嘗試將LinearLayouts添加到ScrollView ,不如將一個LinearLayout作為ScrollView's子級,並將任何視圖/布局添加到該LinearLayout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM