2015-10-28 8 views
1

Как я могу использовать переменные linearLayout и params из защищенного void onCreate во втором защищенном void finishButton? Мне нужно добавить finishButton в linearLayout. Вот мой код:Как добавить кнопку программно в LinearLayout в android

public class MainActivity extends AppCompatActivity { 
    public static int score = 0; 


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

     ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView); 

     final LinearLayout linearLayout = new LinearLayout(this); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     linearLayout.setLayoutParams(params); 
     linearLayout.setOrientation(linearLayout.VERTICAL); 
     linearLayout.setPadding(0, 110, 0, 0); 
     scrollView.addView(linearLayout); 

     TextView iq_Test_Title = new TextView(this); 
     iq_Test_Title.setText("Text"); 
     iq_Test_Title.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20); 
     iq_Test_Title.setGravity(Gravity.CENTER); 
     iq_Test_Title.setTextColor(Color.RED); 
     linearLayout.addView(iq_Test_Title); 

     finishButton(); 

     // other code 
    } 

    protected void finishButton() { 
     final Button finishButton = new Button(this); 
     finishButton.setText(R.string.finish_button); 
     finishButton.setLayoutParams(params); 
     linearLayout.addView(finishButton); 

     finishButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       finishButton.setEnabled(false); 
      } 
     }); 
    } 
} 

Спасибо!

+0

сначала добавьте текст в свой макет после этого, добавьте свой макет в прокрутку. возможно, это было бы полезно. и также имейте в виду, что scrollview не может содержать более одного ребенка. –

+0

Обработать LinearLayout как группу просмотра ** «Группа групп просмотра = (ViewGroup) linearLayout;» ** и затем попытаться добавить кнопку в качестве вида. – ozgur

+0

Проблема si не в том, что я не могу добавить кнопку, я не могу увидеть linearLayout во второй частной пустоте, чтобы добавить ее, потому что linearLayout объявлен в первом. Как я могу использовать linearLayout во втором? –

ответ

1

Для доступа к представлению внутри метода finishButton, просто сделать его переменный уровень класса:

public class MyActivity... 
    private LinearLayout mLinearLayout; 

    protected void onCreate(..){ 
     mLinearLayout = new LinearLayout(this); 
     ... 
    } 

    private void finishButton(){ 
     ... 
     mLinearLayout.addView(..); 
    } 
} 
+0

Я использовал 'linearLayout.addView (iq_Test_Title);' но это не сработало. –

+0

О, я вижу это сейчас. Является ли linearlayout добавлением в scrollview? Также зачем делать это программно, а не в XML? – AdamMc331

+0

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

0

Если я вас правильно понимаю, вы, вероятно, хотите, чтобы вернуть кнопку вызывающего абонента из finishButton(). Затем добавьте его в представление в onCreate.

Изменить декларацию finishButton в

protected Button finishButton() 

После того как вы получили его в настройках, добавьте строку:

return finishButton; 

в конце этого метода. Затем в onCreate:

linearLayout.addView(finishButton()); 
Смежные вопросы