Добавление более одного LinearLayout в scrollview с использованием цикла while - PullRequest
0 голосов
/ 23 февраля 2019

Я хочу добавить более одного LinearLayout в мой ScrollView, число LinearLayout зависит от количества данных, выбранных из базы данных MySQL.Однако кажется, что нельзя добавить более одного LinearLayout в ScrollView.

Возможно, причина в следующем: у указанного дочернего элемента уже есть родительский элемент.Сначала вы должны вызвать 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.Как я могу решить это?Спасибо всем.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

представление прокрутки может содержать только один дочерний элемент

В представлении прокрутки может быть только один прямой дочерний элемент. Google doc

, поэтому внутри вашего цикла вы должны собрать свои представления в один вертикальный LinearLayout, а затем добавить его в ScrollView вне цикла.

0 голосов
/ 23 февраля 2019

Ссылаясь на https://developer.android.com/reference/android/widget/ScrollView

ScrollView - это "Группа представлений, которая позволяет прокручивать иерархию представлений, размещенную в ней. Представление прокрутки может иметь только одного прямого потомка, помещенного в нее.

Чтобы добавить несколько представлений в представлении с прокруткой, сделайте прямым потомком добавляемую группу представлений, например LinearLayout, и поместите дополнительные представления в этом LinearLayout ".

Вместо этогопопытаться добавить LinearLayouts к ScrollView, поместить один LinearLayout в качестве дочернего элемента ScrollView's и добавить любые представления / макеты к этому LinearLayout.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...