У меня есть класс, который в настоящее время расширяет Activity, и у меня есть методы, такие как findViewById, ArrayAdapter и т.д. Я хочу превратить его в независимый класс, но все вышеперечисленные методы становятся undefined. В чем проблема? Не следует ли импортировать классы достаточно? Например, я импортирую android.view.View для findViewById, но он все равно не имеет значения. Просьба сообщить.
Используя findviewbyid в классе, который НЕ расширяет Activity in android
Ответ 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);