J'ai une classe qui étend actuellement Activity et j'ai des méthodes comme findViewById, ArrayAdapter, etc. Je veux la transformer en classe indépendante, mais toutes les méthodes ci-dessus ne sont plus définies. Quel est le problème? L'importation des classes ne devrait-elle pas suffire? Par exemple, j'importe Android.view.View pour findViewById mais cela ne fait toujours aucune différence . S'il vous plaît aviser.
vous devriez passer l'instance de votre activité à votre deuxième classe sur le constructeur comme ceci:
Dans votre Activity
, instanciez votre classe comme ceci:
MyClass instance = new MyClass(this);
Et dans votre deuxième classe, le constructeur sera comme ceci:
public class MyClass {
public Activity activity;
//.... other attributes
public MyClass( Activity _activity){
this.activity = _activity;
//other initializations...
}
}
et ensuite, lorsque vous souhaitez utiliser la méthode findViewById()
, vous pouvez procéder comme suit:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
si vous voulez appeler une fonction appartenant à Activity
, il vous suffira d'avoir le contexte de la Activity
.
par exemple.
class A extends Activity {
Context ctx;
void onCreate(Bundle b)
ctx = this;
B bob = new B(ctx);
}
}
Voici la classe B.
class B {
B (Activity a) {
a.anyFunctionOfActivity();
}
}
findViewById est une méthode publique non statique de la classe Activity
et ne doit donc être disponible que pour une Activity
objet. Par conséquent, importer Android.view.View
et Android.app.Activity
ne le rendra pas disponible. Pour le rendre disponible, vous pouvez faire passer un objet Actvity
- généralement un point this
dans votre activité. Toutefois, notez que vous devez toujours mettre à jour votre vue dans le fil de l'interface utilisateur.
S'il vous plaît essayez ce qui suit:
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);