Динамическое добавление кнопки в линейное описание в Android

#java #android #button #dynamic

#java #Android #кнопка #динамическое

Вопрос:

Я работаю над проектом, в котором необходимо динамически добавлять кнопки. Но всякий раз, когда я запускаю свое приложение, приложение принудительно закрывается. Я узнал, что проблема заключается в том, когда я пытаюсь добавить кнопки.

 package com.Feras.TestProject;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;

public class TestProject extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    AddAll();
    // Set Text for the button in the Old Testament



}
public void AddAll() {
    LinearLayout linearLayout = (LinearLayout)findViewById(R.id.layout1);
    Button btn = new Button(this); 
    btn.setText("MyButton"); 
    linearLayout.addView(btn); 


    }
}
  

Комментарии:

1. Пожалуйста, используйте ‘adb logcat’, чтобы получить правильную трассировку стека приложения (оно находится в папке platform-tools в установленном Android SDk).

Ответ №1:

попробуйте вот так:

 linearLayout.addView(
                     btn, 
                     new LayoutParams(
                          LayoutParams.WRAP_CONTENT, 
                          LayoutParams.WRAP_CONTENT)
                     );
  

Комментарии:

1. Я бы преувеличил, я не думаю, что добавление из кода — лучшая практика

Ответ №2:

ошибка возникнет только в том случае, если LinearLayout имеет значение null, убедитесь, что layout1 является допустимым элементом R.layout.main

Ответ №3:

Попробуйте следующее в своем пользовательском классе activity:

 this.addContentView(call,
    new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));