2011-01-11 4 views
4

Что я в основном пытаюсь сделать, это передать экземпляр моей Activity другому объекту, который будет создавать динамический интерфейс.Безопасно передавать экземпляр действия другому объекту?

Основная причина, по которой я делаю это, - сохранить класс Activity чистым.

Возникли ли какие-либо последствия при выполнении этого? Будет ли это влиять на сборку мусора и вызывать утечку памяти?

Вот пример того, что я делаю:

активность:

/* uses the instance of the Activity to build Views which are loaded from XML files (for non technical users to add content */ 
ContentHelper ch = new ContentHelper(MyActivity.this); 

Должен ли я сохранить динамичный вид здания в рамках деятельности, или это в порядке, чтобы передать экземпляр к другим классам сделать это?

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

ответ

3

По-моему, это не очень хорошая идея, чтобы передать ДЕЯТЕЛЬНОСТЬ где-то - на самом деле я не уверен, что это вообще будет сделано.

Что вы можете сделать, это:

1 - Вы можете создать свой собственный класс, простирающийся View класс, построить свой интерфейс там. Что вы должны передать этому классу - это ваш контекст активности!

, например:

class Custom_UI_Builder extends View { 
    public Custom_UI_Builder(Context cxt) { 
     super(cxt); 
     // more stuff - your UI components... 
    } 
} 

в деятельности, которая использует вас 'класс UI'

public myActivity extends Activity{ 
    @Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    myView = new Custom_UI_Builder(this); 

      //what every else you need... 

     mainLayout = new LinearLayout(this.getApplicationContext()); 
    mainLParam = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    mainLayout.setLayoutParams(mainLParam); 
    mainLayout.setOrientation(LinearLayout.VERTICAL); 
      mainLayout.addView(myView, LayoutParams.MATCH_PARENT, 390); 
    setContentView(mainLayout); 

}} 

2 - Тогда вы можете создать экземпляр вашего класса custom_UI_builder в вашей деятельности.

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

Надеюсь, что это сработает!

+0

Я вижу, куда вы направляетесь, но это почти то же самое, что я делаю, за исключением того, что вы расширяете представление в своем классе. Вы по-прежнему передаете экземпляр Activity, и это мое беспокойство. Вопрос был в том, можно ли передать экземпляр или нет - это проблема памяти и дизайна ... – xil3

+0

Да - это нормально, чтобы передать контекст. Это можно сделать, перейдя к объекту или передав результат this.getApplicationContext(). Я думаю, что все в порядке, в отношении памяти и дизайна - у вас нет другого способа передать его [надеюсь, что я не вводит вас в заблуждение]. То же самое делается здесь: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html – karla

+0

Я решил сделать что-то похожее на то, что вы сказали хотя (на данный момент). Я расширяю LinearLayout и строю все динамические представления в пределах этого настраиваемого, который затем добавляется к основному виду через Activity - кажется намного более чистым. – xil3

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