Domanda

ho una classe che è attualmente estendendo attività e devo metodi come findViewById, ArrayAdapter etc. Voglio trasformarlo in una classe indipendente, ma tutti i metodi di cui sopra Divento indefinito. Qual è il problema? Non dovrebbe importando le classi essere abbastanza? Per esempio, ho importare android.view.View per findViewById ma fa ancora alcuna differenza. Si prega di avvisare.

È stato utile?

Soluzione

si dovrebbe passare l'istanza della vostra attività al vostro seconda classe sul costruttore in questo modo:

Nel vostro Activity instanciate tua classe in questo modo:

MyClass instance = new MyClass(this);

E nella vostra seconda classe, il costruttore sarà simile a questo:

public class MyClass {

public Activity activity; 
//.... other attributes 

public MyClass( Activity _activity){

   this.activity = _activity;
//other initializations...

}
}

e poi quando si desidera utilizzare il metodo findViewById(), si può fare in questo modo:

EditText txt = (EditText)this.activity.findViewById(R.id.txt);

Altri suggerimenti

se si desidera chiamare qualsiasi funzione che appartiene a Activity allora unica cosa che dovete avere è contesto della Activity.

ad es.

class A extends Activity {
    Context ctx;

    void onCreate(Bundle b)
        ctx = this;
        B bob = new B(ctx);
    }
}

Ecco di classe B.

class B {

    B (Activity a) {
        a.anyFunctionOfActivity();
    }
}
Metodo pubblico

findViewById è non-statico del Activity Classe , quindi è solo disponibile per un Activity oggetto . Pertanto, l'importazione e android.view.View android.app.Activity non renderlo disponibile. Per renderlo disponibile, si poteva passare intorno ad un oggetto Actvity - di solito un punto this nella vostra attività. Tuttavia, si noti che si dovrebbe sempre aggiornare la vista nel thread UI.

Si prega di provare quanto segue:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top