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

前端 未结 4 624
无人及你
无人及你 2020-12-13 06:35

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 met

相关标签:
4条回答
  • 2020-12-13 06:39

    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);
    
    0 讨论(0)
  • 2020-12-13 06:42

    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);
    
    0 讨论(0)
  • 2020-12-13 06:44

    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();
        }
    }
    
    0 讨论(0)
  • 2020-12-13 06:48

    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.

    0 讨论(0)
提交回复
热议问题