2017-01-14 3 views
2

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

MainActivity.java

public class MainActivity extends AppCompatActivity { 

private PageBuilder pb = new PageBuilder(); 

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

    pb.mainMenu(); 
} } 

PageBuilder.java

public class PageBuilder extends MainActivity { 

public void mainMenu() { 
    LinearLayout ll = (LinearLayout) findViewById(R.id.empty); 
    LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

    Button btnOne = new Button(getApplicationContext()); 
    btnOne.setLayoutParams(btnParams); 
    btnOne.setText("One"); 
    ll.addView(btnOne); 

    Button btnTwo = new Button(getApplicationContext()); 
    btnTwo.setLayoutParams(btnParams); 
    btnTwo.setText("Two"); 
    ll.addView(btnTwo); 

    Button btnThree = new Button(getApplicationContext()); 
    btnThree.setLayoutParams(btnParams); 
    btnThree.setText("Three"); 
    ll.addView(btnThree); 
} } 

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

Я пробовал public class PageBuilder extends Activity & & AppCompatActivity. Вызывается метод, но он не нравится LinearLayout ll = (LinearLayout) findViewById(R.id.empty); (пустое .xml существует и находится в директории layout).

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

+0

'Я думаю, что проблема в том, что я пытаюсь findViewById из другого класса' да верно: передать 'this' в 'mainMenu (Activity activity)', используйте 'activity' для вызова findViewById, а также не нужно расширять' MainActivity' в 'PageBuilder', если это не активность –

+0

' PageBuilder' выдает несколько ошибок '' can not resolve', если я удаляю ' extends'. Отправка операции дает мне ошибку «не может быть применена». Опять же, не знаю, чего мне не хватает – TomFirth

ответ

2

В вас MainActivity

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    PageBuilder obj = new PageBuilder(this); 
    obj.mainMenu(); 
}} 

В PageBuilder.java

public class PageBuilder { 

Context mContext; 
PageBuilder(Context mContext){ 
    this.mContext = mContext; 
} 

public void mainMenu() { 
    LinearLayout ll = new LinearLayout(mContext); 
    LinearLayout.LayoutParams llP = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
    ll.setLayoutParams(llP); 
    ll.setOrientation(LinearLayout.VERTICAL); 
    LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 

    Button btnOne = new Button(mContext.getApplicationContext()); 
    btnOne.setLayoutParams(btnParams); 
    btnOne.setText("One"); 
    ll.addView(btnOne); 

    Button btnTwo = new Button(mContext.getApplicationContext()); 
    btnTwo.setLayoutParams(btnParams); 
    btnTwo.setText("Two"); 
    ll.addView(btnTwo); 

    Button btnThree = new Button(mContext.getApplicationContext()); 
    btnThree.setLayoutParams(btnParams); 
    btnThree.setText("Three"); 
    ll.addView(btnThree); 
    Activity activity = (Activity)mContext; 
    activity.setContentView(ll); 
}} 
+0

Легко, когда вы знаете, как;) это сработало. – TomFirth

+1

Да, это действительно слишком просто :) –

Смежные вопросы