Подтвердить что ты не робот

Используя findviewbyid в классе, который НЕ расширяет Activity in android

У меня есть класс, который в настоящее время расширяет Activity, и у меня есть методы, такие как findViewById, ArrayAdapter и т.д. Я хочу превратить его в независимый класс, но все вышеперечисленные методы становятся undefined. В чем проблема? Не следует ли импортировать классы достаточно? Например, я импортирую android.view.View для findViewById, но он все равно не имеет значения. Просьба сообщить.

4b9b3361

Ответ 1

вы должны передать экземпляр своей Деятельности вашему второму классу в конструкторе следующим образом:

В вашем Activity введите свой класс следующим образом:

MyClass instance = new MyClass(this);

И в вашем втором классе конструктор будет выглядеть следующим образом:

public class MyClass {

public Activity activity; 
//.... other attributes 

public MyClass( Activity _activity){

   this.activity = _activity;
//other initializations...

}
}

а затем, когда вы хотите использовать метод findViewById(), вы можете сделать следующее:

EditText txt = (EditText)this.activity.findViewById(R.id.txt);

Ответ 2

если вы хотите вызвать любую функцию, относящуюся к Activity, тогда единственное, что вам нужно - это контекст Activity.

например.

class A extends Activity{

Context ctx;
void oncreate(Bundle b)
ctx = this;

B bob = new B(ctx);
}
}

Вот класс B.

Class B
{
B(Activity a)
{
a.anyFunctionOfActivity();
}

}

Ответ 3

findViewById - это нестатический открытый метод класса Activity, поэтому он доступен только для объекта Activity . Поэтому импорт android.view.View и android.app.Activity не сделает его доступным. Чтобы сделать его доступным, вы можете передать объект Actvity - обычно this в вашей деятельности. Однако обратите внимание, что вы всегда должны обновлять свой вид в потоке пользовательского интерфейса.

Ответ 4

Попробуйте следующее:

public static View getLayoutByRes(@LayoutRes int layoutRes,@Nullable ViewGroup viewGroup)
{
    final LayoutInflater factory = getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    return factory.inflate(layoutRes, viewGroup);
}

TextView tv = (TextView) getLayoutByRes(R.layout.xxx ,Null).findViewById(R.id.editd);