2013-08-14 2 views
0

У меня есть активность myActivity, которая содержит один TextView myTv, а другой класс myClass с помощью одного метода modifyTv.Изменить значение TextView из внешнего класса

Как изменить значение myTv с использованием метода modifyTv?

class myActivity extends Activity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    myClass myc = new myClass(); 
    myc.modifyTv();// this line of code must be able to modify myTv value. 

} 
} 

ответ

1

У вас есть несколько вариантов:

1. Pass подробнее конструктору. Например, Context или myTv. Например:

public class MyClass { 
    Context context; 
    public MyClass(Context context) { 
     this.context = context; 
    } 
    public void modifyTv() { 
     TextView tv = (TextView) context.findViewById(R.id.myTv); 
     tv.setText("Foobar"); 
    } 
} 

Тогда просто позвоните:

MyClass m = new MyClass(this); 
m.modifyTv(); 

2. Pass подробнее методу modifyTv().

public class MyClass { 

    public void modifyTv(TextView tv) { 
     tv.setText("Foobar"); 
    } 
} 

Тогда просто позвоните:

MyClass m = new MyClass(); 
m.modifyTv((TextView) findViewById(R.id.tv)); 

3. Другие, более сложные способы, которые не имеют особого смысла.

+1

, не пропускают Контексты активности на Android, они уничтожаются и воссоздаются при вращении, а также могут вызвать утечку памяти очень легко - http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/ – edthethird

+0

@edthethird Итак, первый вариант не рекомендуется? –

+1

нет, старайтесь избегать этого, если это возможно. Лучше передать сам «TextView» вместо «Контекста». Вариант 2, как и мой ответ, я бы рекомендовал. – edthethird

1

В «MyClass» вам потребуется ссылка на вашу деятельность, так что вы можете позвонить

activity.findViewById(R.id.text_id) 

Вы можете передать деятельность в конструкторе или создание скажет setCurrentActivity метода в myClass

Или, еще проще иметь ссылку на сам TextView.

+0

по деятельности вы имеете в виду 'myActivity'? –

+0

Точно;) Но самым простым способом будет передать TextView, на который указывает @edthethird – Axxiss

1

хорошо, вы могли бы сделать:

myc.modifyTv(myTextView);

и просто передать TextView вы хотите изменить в качестве параметра.

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