我有一个当前正在扩展Activity的类,我有findViewById,ArrayAdapter等方法。 我想将它变成一个独立的类,但所有上述方法都变得不确定。问题是什么?不应该导入类足够吗?例如,我为findViewById导入android.view.View但它仍然没有区别。 请指教。
答案 0 :(得分:68)
你应该将你的Activity实例传递给构造函数中的第二个类,如下所示:
在你的Activity
Instanciate your Class中:
MyClass instance = new MyClass(this);
在你的第二节课中,构造函数将是这样的:
public class MyClass {
public Activity activity;
//.... other attributes
public MyClass( Activity _activity){
this.activity = _activity;
//other initializations...
}
}
然后当你想使用findViewById()
方法时,你可以这样做:
EditText txt = (EditText)this.activity.findViewById(R.id.txt);
答案 1 :(得分:8)
如果你想调用任何属于Activity
的函数,那么你只需要拥有Activity
的上下文。
例如
class A extends Activity {
Context ctx;
void onCreate(Bundle b)
ctx = this;
B bob = new B(ctx);
}
}
这是B级。
class B {
B (Activity a) {
a.anyFunctionOfActivity();
}
}
答案 2 :(得分:6)
findViewById是Activity
类的非静态公共方法,因此仅适用于Activity
对象。因此,导入android.view.View
和android.app.Activity
不会使其可用。要使其可用,您可以传递Actvity
个对象 - 通常是活动中的this
点。但是,请注意,您应始终在UI线程中更新View。
答案 3 :(得分:0)
请尝试以下方法:
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);