Проблема с LayoutParam внутри функции - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь очистить свой Java-код, поместив RelativeLayout.LayoutParams внутри функции, чтобы мне не приходилось создавать новые макеты каждый раз, когда я добавляю новую вещь.

Проблема: я получил код ошибки

Unable to start activity ComponentInfo{onedevz.com.noct/onedevz.com.noct.MainActivity}: java.lang.NullPointerException: Layout parameters cannot be null

там написано, что у меня нет параметров макета, хотя он у меня есть, и я позвонил до того, как поместил его в кнопку. вот код

public class MainActivity extends AppCompatActivity {

    MicButton micbutton;
    Button menuBtn,onBtn;
    EditText text;
    RelativeLayout relativeLayout;
    RelativeLayout.LayoutParams lp1,lp2,lp3,lp4;
    boolean clicked;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

// Creating a new RelativeLayout
        relativeLayout = new RelativeLayout(this);

        // Defining the RelativeLayout layout parameters.
        // In this case I want to fill its parent
        RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.FILL_PARENT,
                RelativeLayout.LayoutParams.FILL_PARENT);

// Defining the layout parameters of the TextView
        placement(lp1,100,100,0,200,40,0,RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.ALIGN_PARENT_LEFT);
        placement(lp2,100,100,0,350,40,0,RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.ALIGN_PARENT_LEFT);
        placement(lp3,100,100,0,500,40,0,RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.ALIGN_PARENT_LEFT);
        placement(lp4,100,ViewGroup.MarginLayoutParams.MATCH_PARENT,150,0,40,0,RelativeLayout.ALIGN_PARENT_TOP,RelativeLayout.CENTER_HORIZONTAL);

        setParameter();

        addView();
// Setting the RelativeLayout as our content view
        setContentView(relativeLayout, rlp);
}
   void placement(RelativeLayout.LayoutParams name,int height,int width,int topMargin,int bottomMargin,int leftMargin,int rightMargin,int rule1,int rule2){
        name = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        name.addRule(rule1);
        name.addRule(rule2);
        name.leftMargin = leftMargin;
        name.bottomMargin = bottomMargin;
        name.height = height;
        name.width = width;
    }

    void setParameter(){
        // Setting the parameters on the TextView
        micbutton.setLayoutParams(lp1);
        onBtn.setLayoutParams(lp2);
        menuBtn.setLayoutParams(lp3);
        text.setLayoutParams(lp4);
    }

    void addView(){
        // Adding the TextView to the RelativeLayout as a child
        relativeLayout.addView(micbutton);
        relativeLayout.addView(text);
    }
}

Любая помощь будет оценена, спасибо.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Ваши LayoutParameters lp1, lp2, lp3, lp4 не были инициализированы. Инициализируйте их, а затем установите TextView.

0 голосов
/ 03 сентября 2018

Решение:

Напишите так:

void placement(RelativeLayout.LayoutParams name,int height,int width,int topMargin,int bottomMargin,int leftMargin,int rightMargin,int rule1,int rule2){
    name = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT,
            RelativeLayout.LayoutParams.WRAP_CONTENT);
    name.addRule(rule1);
    name.addRule(rule2);
    name.leftMargin = leftMargin;
    name.bottomMargin = bottomMargin;
    name.height = height;
    name.width = width;

    void setParameter();
}

void setParameter(){
    // Setting the parameters on the TextView
    micbutton.setLayoutParams(lp1);
    onBtn.setLayoutParams(lp2);
    menuBtn.setLayoutParams(lp3);
    text.setLayoutParams(lp4);

    void addView();

}

void addView(){
    // Adding the TextView to the RelativeLayout as a child
    relativeLayout.addView(micbutton);
    relativeLayout.addView(text);
}

Надеюсь, это решит вашу проблему.

...