Android:从类中使用'FindViewById'?

时间:2011-11-29 18:34:50

标签: android

我有一个实现Observable的类。这个课与我的活动课分开。是否可以从Observable类编辑视图,或者是否必须通过活动类进行所有编辑?

当然,这个类在我的活动中被实例化为一个对象。

3 个答案:

答案 0 :(得分:3)

使用以下示例代码。 您可以将上下文转换为活动,然后您可以在其他类中使用findViewById。 您只需要使用此构造函数传递上下文。

public SampleClass{

    SampleClass(Context mContext) {
        Activity activity = (mContext instanceof Activity) ? (Activity) mContext : null;
        Button mButton = activity.findViewById(R.id.button1);
    }

}

答案 1 :(得分:1)

您可以从任何所需的类编辑活动视图,只需将正确的引用传递给它们即可。并确保您在主线程上进行编辑。

答案 2 :(得分:1)

添加到Hitesh的示例中,这是一个包装器,它接受上下文(检索对您的活动的引用)和视图(要测试和控制的元素,例如按钮)

/**
 * Sets the text size of a view according to the device's Display Metrics
 * @param context
 *  e.g. an activity containing the view
 * @param view
 *  e.g. a button in the activity
 */
public static void SetTextSizeForDevices(Context context, View view){

    Activity activity = (context instanceof Activity) ? (Activity) context : null;
    View mView = activity.findViewById(view.getId());
    Button mButton;
    TextView mTextView;
    if(mView instanceof Button){
        mButton = (Button) mView;
        mButton.setTextSize(TEXTSIZEMULTIPLIER * context.getResources().getDisplayMetrics().density);
    }
    if(mView instanceof TextView){
        mTextView = (TextView) mView;
        mTextView.setTextSize(TEXTSIZEMULTIPLIER * context.getResources().getDisplayMetrics().density);
    }
}

TEXTSIZEMULTIPLIER可以是全局的例如

private static int TEXTSIZEMULTIPLIER = 16;

在要为

设置文本大小的所有活动视图上调用此静态方法

迈克尔