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

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

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

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

В своей 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); 

Если вы хотите вызвать любую функцию, принадлежащую 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(); } } 

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

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

 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);