Использование FindViewByID в классе, который не расширяет активность в Android

StackOverflow https://stackoverflow.com/questions/8323777

Вопрос

У меня есть класс, который в настоящее время расширяет деятельность, и у меня есть такие методы, как 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top