Namratha
Namratha

Reputation: 16780

using findviewbyid in a class that does NOT extend Activity in android

I have a class that is currently extending Activity and I have methods like findViewById, ArrayAdapter etc. I want to turn it into an independent class but all the above methods become undefined. What is the problem? Shouldn't importing the classes be enough? For eg, I import android.view.View for findViewById but it still makes no difference. Please advise.

Upvotes: 48

Views: 66039

Answers (4)

N-JOY
N-JOY

Reputation: 7635

if you want to call any function that belongs to Activity then only thing you need to have is context of the Activity.

eg.

class A extends Activity {
    Context ctx;

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

Here is class B.

class B {

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

Upvotes: 12

Ali Bagheri
Ali Bagheri

Reputation: 3419

Please try the following:

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);

Upvotes: 0

Houcine
Houcine

Reputation: 24181

you should pass the instance of your Activity to your Second Class on the constructor like this :

In your Activity Instanciate your Class like this :

MyClass instance = new MyClass(this);

And in your second Class , the constructor will be like this :

public class MyClass {

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

public MyClass( Activity _activity){

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

}
}

and then when you want to use the findViewById() method , you can do like this :

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

Upvotes: 87

pierrotlefou
pierrotlefou

Reputation: 40721

findViewById is non-static public method of the Activity Class ,so it only be available for a Activity object. Therefore, import android.view.View and android.app.Activity won't make it available. To make it available, you could pass around a Actvity object - usually a this point in your activity. However, notice that you should always update your View in the UI thread.

Upvotes: 6

Related Questions