Использование FindViewByID в классе, который не расширяет активность в Android
-
26-10-2019 - |
Вопрос
У меня есть класс, который в настоящее время расширяет деятельность, и у меня есть такие методы, как FindViewByID, ArrayAdapter и т. Д. Я хочу превратить его в независимый класс, но все вышеперечисленные методы становятся не определенными. В чем проблема? Разве импорт классов не должен быть достаточно? Например, я импортирую Android.View.View для findViewByID, но это все еще не имеет значения. Пожалуйста, порекомендуйте.
Решение
Вы должны передать экземпляр вашей деятельности второму классу на конструкторе, как это:
В твоей 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);
}
}
Вот класс Б.
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);