Программно добавить LinearLayout в другой LinearLayout - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать действие, которое добавило бы настраиваемый вид внутри LinearLayout. Я пытаюсь добавить LinearLayout внутри sample_answer_view. xml Вот код sample_answer_view. xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
    android:id="@+id/answer_num_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="X)"
    android:layout_margin="10dp"/>

<Button
    android:id="@+id/answer_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:text="Button" />

А вот код для SampleAnswerView. java

package com.example.sxoli_odigisis;

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SampleAnswerView extends LinearLayout {
    private TextView answer_num_tv;
    private Button answer_btn;

    public SampleAnswerView(Context context){
        super(context);
        initializeViews(context);
    }

    public SampleAnswerView(Context context, AttributeSet attrs){
        super(context, attrs);
        initializeViews(context);
    }

    public SampleAnswerView(Context context, AttributeSet attrs, int defStyle){
        super(context, attrs, defStyle);
        initializeViews(context);
    }

    public void initializeViews(Context context){
        LayoutInflater inflater = (LayoutInflater) 
        context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater.inflate(R.layout.sample_answer_view, this);
    }

}

Как я могу добавить это представление, например, 2 раза внутри Linear Layout с кодом

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">

Используя java, который добавляется внутри MainActivity. java

Итак, я Я пытаюсь создать приложение, которое получает возможные ответы из базы данных, но количество возможных ответов не известно до получения элементов из базы данных. Допустим, в нем говорится, что на этот вопрос есть 3 возможных ответа. Используя a для l oop, будет создано 3 элемента. Этими элементами будут кнопка и текстовое представление, которые были добавлены в LinearLayout (это код внутри sample_answer_view. xml

Элементы должны быть добавлены внутри MainActivity внутри другого LinearLayout.

Заранее благодарю!

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вот что вам нужно

В файле макета

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" />

В активности

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_blank);

    LinearLayout root = findViewById(R.id.root);
    int numberOfAnswers = 3; //assume 3
    for (int i = 0; i < numberOfAnswers; i++) {
        View child = View.inflate(this, R.layout.item, null);
        root.addView(child);
    }
}
1 голос
/ 13 июля 2020

Попробуйте добавить следующий код в свой код MainActivity и, соответственно, отрегулируйте

LinearLayout mainLayout = (LinearLayout)findViewById(R.id.yourmainlayout);
 LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 View itemBox = inflater.inflate(R.layout.the_layout_you_want_to_add);
 mainLayout.addView(itemBox);

, если вы хотите изменить текст кнопки макета (main или itembox)

Button btn1=(TextView)itemBox.findviewbyId(R.id.button1);
btn1.settext("TEST");
...